[pandas] DataFrame

aretelma·2022년 5월 23일
0
post-thumbnail

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

Dataframe

라벨링된 행과 열로 이루어진 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)

Series

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

이렇게 딕셔너리와 유사하게 인덱스에 특정 값을 지정해줄 수 있다.


Dataframe 생성

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)을 추가할 수도 있다.


iloc, loc, iat

dataframe 의 행과 열에 접근이 필요할 때 주로 사용하게 되는 property

  • iloc
    • integer-location based indexing (정수)
  • loc
    • label based, Access a group of rows and columns by label (라벨 이름)
  • iat
    • Access a single value for a row/column pair by integer position (정수)
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

profile
졸업하기 싫어요

0개의 댓글