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 |