[Pandas} 02. 데이터프레임(DataFrame)
2. DataFrame
DataFrame은 행과 열로 만들어지는 2차원 배열 구조로, 여러개의 Series들이 모여서 구성된 것이다. 즉, DataFrame의 열은 각각 Series 객체이다.
데이터프레임은 행과 열을 나타내기 위해 행인덱스와 컬럼명 두 가지 종류의 index를 사용한다.
열(Column)은 공통의 속성을 갖는 일련의 데이터이고, 행(Row)는 개별 관측대상에 대한 다양한 속성 데이터들의 모음인 Record이다.
판다스 라이브러리 불러오기
import pandas as pd
2.1 생성: pd.DataFrame()
데이터프레임은 파이썬의 기본 자료형인 list나 dictionary를 이용하거나, Pandas의 Series를 활용하여 생성할 수 있다. 사실 데이터 분석을 할 때 데이터를 직접 만들 일은 거의 없으므로 가볍게 보고 넘어가자.
list 이용
리스트를 이용하여 데이터프레임을 만들면 각 리스트가 행으로 들어간다. 각 리스트의 길이가 동일하지 않을 경우 가장 긴 리스트 기준으로 모자란 길이는 NaN값으로 생성된다. 리스트로 생성하는 경우 행인덱스와 컬럼명을 따로 지정해줘야 한다.
df = pd.DataFrame([['커피', 5000, 60],
['주스', 6000, 45],
['밀크티', 6500, 30]])
_ | 0 | 1 | 2 |
---|---|---|---|
0 | 커피 | 5000 | 60 |
1 | 주스 | 6000 | 45 |
2 | 밀크티 | 6500 | 30 |
위와 같은 모양의 데이터 프레임이 생성된다.
DataFrame을 만들 때, 행인덱스와 컬럼명을 지정해주고 싶으면 메서드 내의 index
와 columns
인자를 사용할 수 있다.
df = pd.DataFrame([['커피', 5000, 60],
['주스', 6000, 45],
['밀크티', 6500, 30]],
index = ['coffee', 'juice', 'milktea'],
columns = ['제품명', '가격', '판매량'])
_ | 제품명 | 가격 | 판매량 |
---|---|---|---|
coffee | 커피 | 5000 | 60 |
juice | 주스 | 6000 | 45 |
milktea | 밀크티 | 6500 | 30 |
Dictionary 이용
딕셔너리를 이용하면 key가 컬럼명으로 들어간다. 시리즈를 만들 때 key가 인덱스가 되던 것과 비슷하다.
df = pd.DataFrame({'제품명':['커피', '주스', '밀크티'],
'가격':[5000, 6000, 6500],
'판매량':[60, 45, 30]})
_ | 제품명 | 가격 | 판매량 |
---|---|---|---|
0 | 커피 | 5000 | 60 |
1 | 주스 | 6000 | 45 |
2 | 밀크티 | 6500 | 30 |
Series 이용
각 시리즈가 데이터프레임의 열로 구성된다. 시리즈의 index가 데이터프레임의 행인덱스가 된다.
s1 = pd.Series(['커피', '주스', '밀크티'], index = ['coffee', 'juice', 'milktea'])
s2 = pd.Series({'coffee':5000, 'juice':6000, 'milktea':6500})
s3 = pd.Series({'coffee':60, 'juice':45, 'milktea':30})
df = pd.DataFrame({'제품명':s1, '가격':s2, '판매량':s3})
_ | 제품명 | 가격 | 판매량 |
---|---|---|---|
coffee | 커피 | 5000 | 60 |
juice | 주스 | 6000 | 45 |
milktea | 밀크티 | 6500 | 30 |
2.2 method
df = pd.DataFrame({'제품명':['커피', '주스', '밀크티'],
'가격':[5000, 6000, 6500],
'판매량':[60, 45, 30]})
_ | 제품명 | 가격 | 판매량 |
---|---|---|---|
0 | 커피 | 5000 | 60 |
1 | 주스 | 6000 | 45 |
2 | 밀크티 | 6500 | 30 |
DataFrame.index
: 행인덱스
df.index
[Output]
RangeIndex(start=0, stop=3, step=1)
DataFrame.columns
: 컬럼명
df.columns
[Output]
Index(['제품명', '가격', '판매량'], dtype='object')
DataFrame.values
: 행인덱스와 컬럼명을 제외한 데이터 값만 보여줌(array)
df.values
[Output]
[['커피' 5000 60]
['주스' 6000 45]
['밀크티' 6500 30]]
DataFrame.shape
: 데이터프레임 크기 (행,열)
df.shape
[Output]
(3, 3)
DataFrame.dtypes
: 각 열의 자료형
df.dtypes
[Output]
제품명 object
가격 int64
판매량 int64
DataFrame.info()
: 데이터프레임 각 열의 요약정보
df.info()
[Output]
<class 'pandas.core.frame.DataFrame'>
Index: 3 entries, coffee to milktea
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 제품명 3 non-null object
1 가격 3 non-null int64
2 판매량 3 non-null int64
dtypes: int64(2), object(1)
memory usage: 96.0+ bytes
2.3 index, columns 변경
DataFrame.index = [새 인덱스 리스트]