Pandas Dataframe index
데이터 프레임 인덱스
인덱스 설정과 제거
데이터 프레임에서 인덱스는 성능과도 관련이 있는 요소이므로 상황에 맞게 설계하며 조작할 수 있어야 한다.
우선 데이터셋을 만들고 다양한 조작법을 알아보자.
import pandas as pd
import numpy as np
list1 = ['A','B','C','D','E']
list2 = [4,5,3,6,9]
list3 = [0.66,0.77,0.88,0.99,1.11]
list4 = ['홍길동','윤길동','이길동','박길동','김길동',]
df = pd.DataFrame({'칼럼1':list1, '칼럼2':list2,'칼럼3': list3 ,'칼럼4':list4})
df
칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 | |
---|---|---|---|---|
0 | A | 4 | 0.66 | 홍길동 |
1 | B | 5 | 0.77 | 윤길동 |
2 | C | 3 | 0.88 | 이길동 |
3 | D | 6 | 0.99 | 박길동 |
4 | E | 9 | 1.11 | 김길동 |
set_index()
set_index() 함수를 통해 기존의 행 인덱스를 제거하고 특정 칼럼을 인덱스로 변경할 수 있다.
df2=df.set_index('칼럼1')
df2
칼럼2 | 칼럼3 | 칼럼4 | |
---|---|---|---|
칼럼1 | |||
A | 4 | 0.66 | 홍길동 |
B | 5 | 0.77 | 윤길동 |
C | 3 | 0.88 | 이길동 |
D | 6 | 0.99 | 박길동 |
E | 9 | 1.11 | 김길동 |
df2.index
Index(['A', 'B', 'C', 'D', 'E'], dtype='object', name='칼럼1')
df2.loc['A':'D']
칼럼2 | 칼럼3 | 칼럼4 | |
---|---|---|---|
칼럼1 | |||
A | 4 | 0.66 | 홍길동 |
B | 5 | 0.77 | 윤길동 |
C | 3 | 0.88 | 이길동 |
D | 6 | 0.99 | 박길동 |
set_index() 를 통해 기존의 0,1,2,3,4 로 이루어진 행 인덱스는 삭제하고 칼럼1이 인덱스로 바뀌었다.
index name은 기존의 칼럼명을 따라가게 된다.
기존 인덱스가 사라졌으므로 loc로 데이터를 인덱싱할 때에도 바뀐 칼럼 A의 값으로 데이터로 인덱싱 해야 한다.
reset_index()
reset_index() 함수를 통해 기존의 인덱스를 제거 혹은 칼럼화 시키고, 행을 기준으로 0 부터 시작하는 일반적인 정수형 인덱스를 추가할 수 있다.
df2.reset_index()
칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 | |
---|---|---|---|---|
0 | A | 4 | 0.66 | 홍길동 |
1 | B | 5 | 0.77 | 윤길동 |
2 | C | 3 | 0.88 | 이길동 |
3 | D | 6 | 0.99 | 박길동 |
4 | E | 9 | 1.11 | 김길동 |
만약 drop=Ture 값을 준다면 기존 인덱스 였던 열은 칼럼으로 돌아가는 것이 아니라 삭제 된다.
df2.reset_index(drop=True)
칼럼2 | 칼럼3 | 칼럼4 | |
---|---|---|---|
0 | 4 | 0.66 | 홍길동 |
1 | 5 | 0.77 | 윤길동 |
2 | 3 | 0.88 | 이길동 |
3 | 6 | 0.99 | 박길동 |
4 | 9 | 1.11 | 김길동 |
다중 인덱스
행이나 열에 여러 계층을 가지는 다중 인덱스를 설정 할 수 있다.
생성
df3 = pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], columns=[['A','A','B','B'],['칼럼1','칼럼2','칼럼3','칼럼4']])
df3
A | B | |||
---|---|---|---|---|
칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 | |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
columns = 에 다중 리스트 형태로 인덱스를 넣어주면 된다.
인덱스 이름 추가
df3.columns.names= ['이름1','이름2']
df3
이름1 | A | B | ||
---|---|---|---|---|
이름2 | 칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 |
0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 |
3 | 13 | 14 | 15 | 16 |
마찬가지로 칼럼 인덱스 뿐만 아니라 행 인덱스도 다중으로 생성하고 이름을 설정할 수 있다.
df4 = pd.DataFrame([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],
columns=[['A','A','B','B'],['칼럼1','칼럼2','칼럼3','칼럼4']],
index=[[1,1,2,2],['하나','둘','셋','넷']])
df4.columns.names = ['이름1','이름2']
df4.index.names = ['인덱스1', '인덱스2']
df4
이름1 | A | B | |||
---|---|---|---|---|---|
이름2 | 칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 | |
인덱스1 | 인덱스2 | ||||
1 | 하나 | 1 | 2 | 3 | 4 |
둘 | 5 | 6 | 7 | 8 | |
2 | 셋 | 9 | 10 | 11 | 12 |
넷 | 13 | 14 | 15 | 16 |
다중 인덱스 인덱싱
인덱스가 다중으로 있는 경우 인덱스 값을 튜플의 형태로 입력하여야 한다.
df4.loc[(1,'하나'),('A','칼럼2')]
2
df4[('A','칼럼2')]=100
df4
이름1 | A | B | |||
---|---|---|---|---|---|
이름2 | 칼럼1 | 칼럼2 | 칼럼3 | 칼럼4 | |
인덱스1 | 인덱스2 | ||||
1 | 하나 | 1 | 100 | 3 | 4 |
둘 | 5 | 100 | 7 | 8 | |
2 | 셋 | 9 | 100 | 11 | 12 |
넷 | 13 | 100 | 15 | 16 |
df4.A
이름2 | 칼럼1 | 칼럼2 | |
---|---|---|---|
인덱스1 | 인덱스2 | ||
1 | 하나 | 1 | 100 |
둘 | 5 | 100 | |
2 | 셋 | 9 | 100 |
넷 | 13 | 100 |
df4.loc[1]['A']
이름2 | 칼럼1 | 칼럼2 |
---|---|---|
인덱스2 | ||
하나 | 1 | 100 |
둘 | 5 | 100 |
주의할 점은 iloc 함수에서는 튜플 형태로 다중 인덱싱을 사용할 수 없다.
댓글남기기