본문 바로가기
판다스/판다스 팁

[pandas] csv파일의 멀티 인덱스를 판다스로 읽었을 때 Unnamed columns가 생성된다면?

by 김판다t 2023. 8. 23.

 

 

 

그림과 같은 멀티 인덱스를 기대하고 아래 코드를 실행했다

 

 

import io
import pandas as pd

csv = '''
	A팀		B팀		C팀	
	삼성전자	카카오	삼성전자	카카오	삼성전자	카카오
2023-08-14	10	20	30	40	50	60
2023-08-16	20	20	30	40	50	60
2023-08-17	30	40	10	20	50	60
2023-08-18	30	40	10	20	50	60
2023-08-21	30	40	30	40	30	40
'''
df = pd.read_csv(io.StringIO(csv), sep='\t', index_col=0, header=[0, 1])
df

 

 

결과는 아래와 같이 column 이름에 Unnamed가 발생했다

 

 

 

그 때는 아래와 같은 코드를 실행해보자

 

df1 = df.columns.to_frame(index=False).apply(lambda x: x.mask(x.str.contains('Unnamed'))).ffill()
df = df.set_axis(pd.MultiIndex.from_frame(df1), axis=1)

 

 

혹시 인덱스명을 없애고 싶다면 아래와 같은 코드를 사용하자

 

df1 = df.columns.to_frame(index=False).apply(lambda x: x.mask(x.str.contains('Unnamed'))).ffill()
df = df.set_axis(pd.MultiIndex.from_frame(df1, names=[''] * len(df.columns[0])), axis=1)

 

names에 columns의 레벨의 개수에 맞춰 ''을 입력하면 된다.

 

이 경우 2개의 레벨을 가진 멀티인덱스니까 names=['', '']을 입력하면 되는데 혹시 이 코드를 돌리는 분이 다른 개수의 멀티인덱스를 가질 때도 똑같은 코드로 돌리게 될 까봐 names=[''] * len(df.columns[0]) 으로 대체하였다

 

 

 

결과는 아래와 같다.

 

 

df

 

 

우리가 원하는 멀티인덱스 구조를 갖추게 된다

 

 

 

유튜브에서 판다스 강의 중입니다

 

https://www.youtube.com/@KimPandas