DataFrame이 마냥 Python의 List와 같은 것이라고 생각했다.
DataFrame을 DataFrame답게 이용하기 위해서 차이점 위주로 정리한다.
DataFrame 데이터 선택 방법
- 인덱스를 명시적으로 지정해 준 경우
import pandas as pd
df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10],index=['a','b','c','d','e','f','g','h','i','j'])
print(df[4:7])
0 | |
e | 5 |
f | 6 |
g | 7 |
print(df['e':'h'])
0 | |
e | 5 |
f | 6 |
g | 7 |
h | 8 |
- loc, iloc
-- loc : is primarily label based
-- iloc : is primarily integer position based
-- 곧바로 인덱스를 사용해도 되지만 혼동을 피하기 위해
-- label을 기준으로 선택할 때는 loc을(주의 - label이 inteager(default)로 되어있는데 loc을 사용하고자 하는 경우)
-- inteager을 기준으로 선택할 때는 iloc을 사용
df1 = pd.DataFrame([1,2,3,4,5,6,7,8,9,10], index=['a','b','c','d','e','f','g','h','i','j'])
df2 = pd.DataFrame([1,2,3,4,5,6,7,8,9,10])
print(df1.iloc[1:4])
0 | |
b | 2 |
c | 3 |
d | 4 |
print(df2.loc[1:4])
0 | |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
- 2차원 DataFrame 데이터를 선택하는 경우
import pandas as pd
df = pd.DataFrame([[3, 6, 9, 5],
[4, 7, 3, 6],
[5, 8, 4, 7]], columns=['A','B','C','D'])
print(df.iloc[:2, 0])
A | |
0 | 3 |
1 | 4 |
print(df.loc[:1,:'B'])
A | B | |
0 | 3 | 6 |
1 | 4 | 7 |
print(df.loc[:1,['A','B','C']])
A | B | C | |
0 | 3 | 6 | 9 |
1 | 4 | 7 | 3 |
- 2차원 DataFrame 열을 선택하는 경우
-- df[ ] inteager index를 바로 넣으면 에러가 발생한다.
import pandas as pd
df = pd.DataFrame([[3, 6, 9, 5],
[4, 7, 3, 6],
[5, 8, 4, 7]], columns=['A','B','C','D'])
print(df['A'])
print(df.loc[:,'A'])
# print(df[0]) # 에러 발생
print(df.iloc[:,0])
A | |
0 | 3 |
1 | 4 |
2 | 5 |
-- 2개 이상의 열을 선택하는 경우 리스트를 이용한다.
-- (열이 연속적인 경우에는 리스트를 이용하지 않아도된다.)
print(df[['B','D']])
print(df.loc[:,['B','D']])
# print(df[[1,3]]) # 에러 발생
print(df.iloc[:,[1,3]])
B | D | |
0 | 6 | 5 |
1 | 7 | 6 |
2 | 8 | 7 |
2차원 DataFrame을 기준으로
1. iloc과 loc 사용법
2. 열(들)만을 선택하는 경우가 아니라면 iloc 또는 loc을 이용한다.
3. 열을 선택하는 경우 df[ ], df.iloc[ ], df.loc[ ] 모두 이용 가능하지만,
default inteager index를 이용하고싶다면 iloc을 이용한다.
(df[0]과 같이바로 접근하면 에러가 발생한다.)