Pandas 객체 생성하기 (Object creation)


Pandas 객체 생성하기 (Object creation)

Pandas의 기본 객체인 SeriesDataFrame을 생성하는 다양한 방법에 대해 알아봅니다.

  • Series: 레이블을 갖는 1차원 어레이

  • DataFrame: 레이블을 갖는 행과 열을 갖는 2차원 어레이




1) Series와 DataFrame


Series는 다양한 자료형을 담을 수 있는 1차원의 어레이이며, 엑셀 문서의 하나의 열 (column)과 같습니다.

SeriesIndex라고 하는 레이블을 가집니다.


_images/object_creation_01.png


DataFrame은 행과 열을 갖는 2차원의 자료형입니다. 여러 개의 Series가 모이면 DataFrame을 구성할 수 있습니다.


_images/object_creation_02.png

그림과 같이 DataFrameIndexKey, 그리고 Value들로 구성됩니다.




2) Series 만들기

예제1 - 정수형 Series

import pandas as pd

s = pd.Series([1, 3, 5, 4, 6, 8])
print(s)
0    1
1    3
2    5
3    4
4    6
5    8
dtype: int64

정수 자료형의 Series를 하나 만들었습니다.

Series()에 값들의 리스트를 입력해서 Series를 만들면, Pandas가 정수 인덱스를 자동으로 만들어줍니다.



예제2 - 실수형 Series

import pandas as pd

s = pd.Series([1, 3.5, 5, 4, 6.2, 8])
print(s)
0    1.0
1    3.5
2    5.0
3    4.0
4    6.2
5    8.0
dtype: float64

정수와 실수가 함께 있는 리스트를 입력하면 두 자료형을 모두 표현할 수 있는 실수 자료형의 Series가 하나 만들어집니다.



예제3 - 인덱스 지정하기

import pandas as pd

s = pd.Series([1, 3.5, 5, 4, 6.2, 8], index=['a', 'b', 'c', 'd', 'e', 'f'])
print(s)
a    1.0
b    3.5
c    5.0
d    4.0
e    6.2
f    8.0
dtype: float64

Series()index 키워드를 사용해서 인덱스를 자유롭게 설정할 수 있습니다.




3) DataFrame 만들기

예제1 - NumPy 어레이로 만들기

import pandas as pd
import numpy as np

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

print(dates)
print(df)
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
             '2013-01-05', '2013-01-06'],
            dtype='datetime64[ns]', freq='D')

                   A         B         C         D
2013-01-01 -0.221506 -1.252301  0.049855 -1.173173
2013-01-02 -0.299313 -1.753844  0.858982  1.006282
2013-01-03 -0.627516  0.791134  1.262370 -0.414763
2013-01-04  0.053944  0.610720 -0.594344  1.301093
2013-01-05 -1.634639 -0.200335  1.106788  0.225533
2013-01-06  2.164460  1.245787 -1.105391 -0.541923

날짜 인덱스와 레이블이 지정된 열이 있는 NumPy 어레이를 전달함으로써 DataFrame을 만들 수 있습니다.

date_range() 함수를 사용해서 ‘20130101’를 시작으로 하는 6개의 DatetimeIndex를 만들었습니다.

각 날짜마다 A, B, C, D열에 해당하는 난수 데이터의 DataFrame이 만들어졌습니다.



예제2 - 딕셔너리로 만들기

import pandas as pd
import numpy as np

df2 = pd.DataFrame({'A': 1.,
                  'B': pd.Timestamp('20130102'),
                  'C': pd.Series(1, index=list(range(4)), dtype='float32'),
                  'D': np.array([3] * 4, dtype='int32'),
                  'E': pd.Categorical(["test", "train", "test", "train"]),
                  'F': 'foo'})

print(df2)
print(df2.dtypes)
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object

Series와 같이 변환될 수 있는 객체의 딕셔너리를 전달함으로써 DataFrame을 생성할 수 있습니다.

딕셔너리의 키가 그대로 DataFrame의 키가 됩니다.

그 결과로 만들어지는 DataFrame의 열 (column)은 서로 다른 자료형 (dtypes)을 갖습니다.




4) csv 활용하기


csv 파일의 데이터를 DataFrame으로 불러올 수 있습니다.

우선 아래와 같은 데이터가 있는 csv 파일을 준비합니다.

_images/object_creation_csv.png

예제1 - header=None

import pandas as pd

df1 = pd.read_csv('pandas_ex01.csv', header=None)

print(df1)
   0  1
0  a  1
1  b  2
2  c  3
3  d  4

read_csv()에 csv 파일을 입력하면, DataFrame을 반환합니다.

header=None과 같이 설정하면 자동으로 생성됩니다.



예제2 - 헤더 지정하기

import pandas as pd

df2 = pd.read_csv('pandas_ex02.csv', header=0)

print(df2)
  string  number
0      a       1
1      b       2
2      c       3
3      d       4

csv 파일의 데이터가 열의 이름으로 사용할 헤더를 포함하는 경우에는 지정할 행의 번호를 입력해줄 수 있습니다.

헤더의 번호를 지정해주지 않으면 header=0과 같습니다.



예제3 - 인덱스 지정하기

import pandas as pd

df3 = pd.read_csv('pandas_ex02.csv', index_col=0)

print(df3)
        number
string
a            1
b            2
c            3
d            4

index_col는 인덱스로 사용할 열을 지정하도록 합니다.

index_col=0으로 지정해서 첫번째 열이 인덱스가 되었습니다.



이전글/다음글