pandas_dataframe.md

DataFrame 객체

  • Pandas의 기본 자료구조, 2차원 배열 또는 리스트, Data Table 전체를 포함하는 objet
  • Row와 column index가 존재
  • 각 column은 서로 다른 데이터 타입을 가질 수 있음
  • Series를 모아서 만든 data table
  • 기본적으로 csv 포맷을 지원, 구분자로 column이 구분된 데이터는 모두 지원
  • R언어 data.frame과 비슷
import pandas as pd
from pandas import Series, DataFrame
import numpy as np

 

1. DataFrame 생성

  • DataFrame 객체를 생성하는 방법: dictionary 또는 numpy 배열 사용
a = pd.DataFrame([[1,2,3],
                 [4,5,6],
                 [7,8,9]])
a

 

0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

 

  • DataFrame에서 values속성은 저장된 데이터를 2차원 배열로 리턴
print(a.values)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

 

2. Dictionary로 DataFrame 생성

data = {
    'city':['서울', '부산', '광주', '대구'],
    'year':[2000, 2001, 2002, 2002],
    'pop': [4000, 2000, 1000, 1000]
}

df = DataFrame(data)
df

city pop year
0 서울 4000 2000
1 부산 2000 2001
2 광주 1000 2002
3 대구 1000 2002

 

  • Column은 정렬되어 출력, column을 지정하면 정렬되지 않고 지정한 순으로 출력됨
df = DataFrame(data, columns=['year', 'city', 'pop'])
df

year city pop
0 2000 서울 4000
1 2001 부산 2000
2 2002 광주 1000
3 2002 대구 1000

 

  • 새로운 column 추가
df = DataFrame(data, columns=['year', 'city', 'pop', 'debt'])
df

year city pop debt
0 2000 서울 4000 NaN
1 2001 부산 2000 NaN
2 2002 광주 1000 NaN
3 2002 대구 1000 NaN

 

df2 = DataFrame(data, columns=['year', 'city', 'pop', 'debt'], 
                index=['one', 'two', 'three', 'four'])
df2

year city pop debt
one 2000 서울 4000 NaN
two 2001 부산 2000 NaN
three 2002 광주 1000 NaN
four 2002 대구 1000 NaN

 

3. Column, index 가져오기

df2

year city pop debt
one 2000 서울 4000 1000
two 2001 부산 2000 2000
three 2002 광주 1000 3000
four 2002 대구 1000 4000

 

1) Column과 index list 가져오기

df2.columns
Index(['year', 'city', 'pop', 'debt'], dtype='object')

 

df2.index
Index(['one', 'two', 'three', 'four'], dtype='object')


2) Column을 선택하여 추출: series 추출

df2['city']
one      서울
two      부산
three    광주
four     대구
Name: city, dtype: object

 

df2['year'] 
one      2000
two      2001
three    2002
four     2002
Name: year, dtype: int64

 

df2.year 
one      2000
two      2001
three    2002
four     2002
Name: year, dtype: int64

  • ix, loc: row(행)를 접근할 때 사용하는 속성, index를 name속성으로 지정함
df2.ix['three']
year    2002
city      광주
pop     1000
debt     NaN
Name: three, dtype: object

 

df2.loc['three']
year    2002
city      광주
pop     1000
debt     NaN
Name: three, dtype: object

  • iloc: index position을 주어 값을 추출
df2.iloc[1:]

year city pop debt
two 2001 부산 2000 NaN
three 2002 광주 1000 NaN
four 2002 대구 1000 NaN

 

df2.year.iloc[1:]
two      2001
three    2002
four     2002
Name: year, dtype: int64


4. NaN값 채우기

df2['debt']=1000
df2

year city pop debt
one 2000 서울 4000 1000
two 2001 부산 2000 1000
three 2002 광주 1000 1000
four 2002 대구 1000 1000

 

df2['debt'] = np.arange(4)
df2

year city pop debt
one 2000 서울 4000 0
two 2001 부산 2000 1
three 2002 광주 1000 2
four 2002 대구 1000 3

 

  • 주의: Series객체를 이용해서 값을 넣을때 index값이 다르면 값이 채워지지 않음
val =  Series([1000, 2000, 3000, 4000])
df2['debt'] = val
df2

year city pop debt
one 2000 서울 4000 NaN
two 2001 부산 2000 NaN
three 2002 광주 1000 NaN
four 2002 대구 1000 NaN

 

val =  Series([1000, 2000, 3000, 4000], 
              index=['one', 'two', 'three', 'four'])
df2['debt'] = val
df2

year city pop debt
one 2000 서울 4000 1000
two 2001 부산 2000 2000
three 2002 광주 1000 3000
four 2002 대구 1000 4000

 

val1 = Series([1000, 3000, 5000], index=['one', 'three', 'four'])
df2['debt'] = val1
df2

year city pop debt
one 2000 서울 4000 1000.0
two 2001 부산 2000 NaN
three 2002 광주 1000 3000.0
four 2002 대구 1000 5000.0

 

df2['aaa'] = df2.city == '서울'
df2

year city pop debt aaa
one 2000 서울 4000 1000.0 True
two 2001 부산 2000 NaN False
three 2002 광주 1000 3000.0 False
four 2002 대구 1000 5000.0 False

 

5. Column 삭제하기

df2.columns 
Index(['year', 'city', 'pop', 'debt', 'aaa'], dtype='object')

 

del df2['aaa']
df2.columns 
Index(['year', 'city', 'pop', 'debt'], dtype='object')


6. Dictionary안에 dictionary가 있을때 DataFrame의 생성

data2 = {
    'seoul':{2001:20, 2002:30},
    'busan':{2000:10, 2001:200, 2002:300}
        }

df3 = DataFrame(data2)
df3

busan seoul
2000 10 NaN
2001 200 20.0
2002 300 30.0

 

7. Row와 column을 서로 바꿈

df3.T

2000 2001 2002
busan 10.0 200.0 300.0
seoul NaN 20.0 30.0

 

'AI&BigData > Basics' 카테고리의 다른 글

[Pandas] 정렬과 순위  (1) 2018.05.06
[Pandas] 함수 적용과 매핑  (0) 2018.05.06
[Pandas] Operation  (0) 2018.05.06
[Pandas] Index 객체, reindex  (0) 2018.05.06
[Pandas] Series 객체  (0) 2018.04.29
[Numpy] 브로드캐스트. 기타활용  (0) 2018.04.24
[Numpy] 자료형, type(), dtype, arange()  (0) 2018.04.24
[Numpy] 연산  (0) 2018.04.24
[Numpy] slicing, indexing  (0) 2018.04.24