파이썬 DataFrame, Series 리인덱싱 하는 방법 (df.index, df.set_index, df.reindex)

bearwoong

·

2022. 9. 12. 10:22

728x90
썸네일
썸네일

DataFrame과 Series 에서 리인덱싱 하는 방법을 알아보겠습니다.

 

리인덱싱은 기존의 인덱스를 수정하는 것을 말합니다. 

기존의 인덱스를 수정할 때 기존의 index 와 value의 mapping을 유지되는 방법과 기존의 mapping이 깨지는 방법이 있습니다. 두 방법의 차이점과 활용방법을 함께 확인해보겠습니다.

 

DataFrame, Series 리인덱싱 요약

s.index = ['a', 'b', 'c', 'd', 'e']
df.index = ['a', 'b', 'c', 'd', 'e']

 

* 기존의 인덱스를 a, b, c, d, e로 변경함.

* 기존의 index와 value의 맵핑이 깨짐.

 

df.set_index("c4")

* 기존의 인덱스를 DataFrame의 column 중 하나 (위 코드에서는 c4 column)로 변경함.

* 기존의 index와 value의 맵핑이 깨짐.

 

s1 = s.reindex([0,1,2,5])
df1 = df.reindex([0,1,2,5])

* 기존의 series에서 0,1,2,3 인덱스에 mapping되어 있는 value만 가져와서 s2로 만듦.

* 기존의 index와 value의 맵핑이 유지됨.

* 빈 index의 value를 채우는 여러 방법이 존재함.

 

*index 와 value의 mapping이라는 말은 기존의 index와 value가 엮여 있는 것을 말합니다.

즉 c1 column에서 index 0은 value가 1입니다.

index를 변경하였을 때 value 1이 index 0 을 따라가면 mapping이 유지된 것이고

index를 변경하였을 때 value 1이 새로운 index를 따라가면 mapping이 깨진 것입니다.

 

반응형

 

s.index, df.index

기존의 인덱스를 변경하는 방법입니다. 

변경하고 싶은 인덱스를 [ ] 안에 넣어주되, 기존의 index와 갯수가 똑같아야 합니다.

기존에 index가 4개 였다면 [ ]안에도 4개의 값을 넣어주어야 index가 변경됩니다.

 

Series 와 DataFrame에서 동일하게 사용할 수 있습니다.

 

df.index = ['a', 'b', 'c', 'd', 'e']

df.index 결과
df.index 결과

 

df.set_index( )

df.set_index 는 DataFrame의 column중의 하나를 index로 변경합니다. 

index로 변경할 column은 DataFrame의 value에서 삭제됩니다.

 

기존의 index와 value의 mapping이 깨집니다.

df.set_index("c4")

df.set_index() 결과
df.set_index() 결과

변경된 DataFrame에서 'c4'는 index명이 됩니다.

 

s.reindex, df.reindex( )

reindex는 Series나 DataFrame의 index를 기존의 index와 value의 mapping을 유지하면서 변경합니다.

새로운 index에 해당하는 value가 없을경우 nan으로 채워지고 method 를 통해 빈 값을 여러방법으로 채울 수 있습니다.

 

s1 = s.reindex([0,1,2,5])
df1 = df.reindex([0,1,2,5])

 

df.reindex() 결과
df.reindex() 결과

NaN은 float이므로 다른 값들도 모두 float로 변경되어 1이 1.0 으로 변경됨을 확인할 수 있습니다.

 

df1 = df.reindex([0,1,2,5], fill_value = 0)

 

df.reindex( fill_value = 0 ) 결과
df.reindex( fill_value = 0 ) 결과

fill_value = 0 은 NaN 대신 0을 넣어서 빈 값을 채우게 됩니다.

 

df1 = df.reindex([0,1,2,5,6], method = 'ffill')

 

df.reindex( method = 'ffill' ) 결과
df.reindex( method = 'ffill' ) 결과

method 로 ffill을 넣게되면 앞의 데이터로 빈 값을 채웁니다.

5와 6 인덱스가 모두 5, 10, 15, 20 으로 채워진 것을 확인할 수 있습니다.

 

함께보면 좋은 포스팅

파이썬 DataFrame 인덱싱 하는 방법(df[ ], df.loc[ ], df.iloc[ ])

numpy array와 python list의 차이 - 코드잇 (+pandas DataFrame)

파이썬 randint, input 함수로 숫자 맞추기 게임 만들기-코드잇

반응형