class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
라벨링된 행과 열로 이루어진 2차원 자료구조라고 할 수 있다.
data = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data) # dictionary를 이용한 dataframe 생성
>>>df
col1 col2
0 1 3
1 2 4
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
# numpy ndarray를 사용해도 dataframe을 생성할 수 있다.
>>>df
a b c
0 1 2 3
1 4 5 6
2 7 8 9
# Series포함 dictionary 이용한 dataframe 생성
data = {'col1': [0, 1, 2, 3], 'col2': pd.Series([2, 3], index=[2, 3])}
pd.DataFrame(data, index=[0, 1, 2, 3])
>>>df
col1 col2
0 0 NaN
1 1 NaN
2 2 2.0
3 3 3.0
(Dataframe은 Series를 객체로 갖는 딕셔너리 형식 자료구조라고도 볼 수 있다)
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
kakao = Series([92600, 92400, 92100, 94300, 92300])
0 92600
1 92400
2 92100
3 94300
4 92300
dtype: int64
기본적으로 python의 list 와 큰 차이가 없어보인다.
하지만,
kakao2 = Series([92600, 92400, 92100, 94300, 92300],
index=['2016-02-19','2016-02-18','2016-02-17','2016-02-16','2016-02-15'])
2016-02-19 92600
2016-02-18 92400
2016-02-17 92100
2016-02-16 94300
2016-02-15 92300
dtype: int64
이렇게 딕셔너리와 유사하게 인덱스에 특정 값을 지정해줄 수 있다.
csv 파일을 읽어서 바로 dataframe 형식으로 만들어줄 수 있다.
df = pd.read_csv("data.csv")
권장되는 방법은 아닌 것으로 보이지만, data 없이 빈 dataframe을 생성할 수도 있다.
df = pd.DataFrame()
생성한 후에 DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False) 사용해서 확장해나갈 수 있다.
1.4.0 버전부터 append()대신 concat() 사용하도록 하고 있다.
df['추가하고 싶은 열의 인덱스'] = 열에 들어갈 값의 리스트
또는, 직접 열(column)을 추가할 수도 있다.
dataframe 의 행과 열에 접근이 필요할 때 주로 사용하게 되는 property
df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
index=['Q', 'W', 'E'],
columns=['A', 'B', 'C'])
>>>df
A B C
Q 0 2 3
W 0 4 1
E 10 20 30
>>>df.iloc[1]
A 0
B 4
C 1
>>>df.iloc[[1,2]] # MultiIndex
A B C
W 0 4 1
E 10 20 30
>>>df.loc['Q']
A 0
B 2
C 3
>>>df.loc['W':'E'] # slicing
>>>df.loc[['W','E']] # MultiIndex
A B C
W 0 4 1
E 10 20 30
>>>df.iat[1,2]
1
pandas.DataFrame.iat
pandas.DataFrame.loc
pandas.DataFrame.iloc
파이썬으로 배우는 알고리즘 트레이딩 2) Series 기초
pandas.Series
pandas.DataFrame