파이썬 DataFrame, Series 리인덱싱 하는 방법 (df.index, df.set_index, df.reindex)
bearwoong
·2022. 9. 12. 10:22
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.set_index( )
df.set_index 는 DataFrame의 column중의 하나를 index로 변경합니다.
index로 변경할 column은 DataFrame의 value에서 삭제됩니다.
기존의 index와 value의 mapping이 깨집니다.
df.set_index("c4")
변경된 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])
NaN은 float이므로 다른 값들도 모두 float로 변경되어 1이 1.0 으로 변경됨을 확인할 수 있습니다.
df1 = df.reindex([0,1,2,5], fill_value = 0)
fill_value = 0 은 NaN 대신 0을 넣어서 빈 값을 채우게 됩니다.
df1 = df.reindex([0,1,2,5,6], method = 'ffill')
method 로 ffill을 넣게되면 앞의 데이터로 빈 값을 채웁니다.
5와 6 인덱스가 모두 5, 10, 15, 20 으로 채워진 것을 확인할 수 있습니다.
함께보면 좋은 포스팅
파이썬 DataFrame 인덱싱 하는 방법(df[ ], df.loc[ ], df.iloc[ ])