[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을 만들 때, 행인덱스와 컬럼명을 지정해주고 싶으면 메서드 내의 indexcolumns 인자를 사용할 수 있다.

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 = [새 인덱스 리스트]