Pandas의 다중 인덱스(MultiIndex)에서 모든 레벨이 NaN인 값을 삭제하려면 multiIndex.dropna() 메서드를 사용하면 됩니다. 이때 매개변수 how의 값을 'all'로 설정하는 것이 핵심입니다.
이 방법을 사용하면 인덱스의 모든 수준(레벨)이 결측값(NaN)으로 구성된 항목을 한 번에 제거할 수 있어, 데이터 정제 과정에서 매우 유용합니다.
필요한 라이브러리 가져오기
먼저 작업에 필요한 라이브러리를 임포트합니다.
import pandas as pd import numpy as np
모든 값이 NaN인 MultiIndex 생성
모든 값이 NaN으로 채워진 다중 인덱스를 생성합니다. names 매개변수를 사용하면 인덱스 각 레벨의 이름을 지정할 수 있습니다.
multiIndex = pd.MultiIndex.from_arrays([[np.nan, np.nan], [np.nan, np.nan]], names=['a', 'b'])
위 코드에서는 두 개의 배열을 기반으로 MultiIndex를 만들었으며, 각 배열은 모두 NaN 값을 가지고 있습니다. 따라서 생성된 인덱스의 모든 항목은 (NaN, NaN) 형태가 됩니다.
dropna()로 NaN 값 삭제하기
MultiIndex에서 모든 레벨이 NaN일 때 해당 값을 삭제합니다. dropna() 메서드의 how 매개변수를 'all'로 설정하면, 모든 값이 NaN인 경우 해당 항목 전체가 삭제됩니다.
print("\n모든 레벨이 NaN인 값 삭제...\n", multiIndex.dropna(how='all'))전체 예제 코드
다음은 지금까지 설명한 내용을 하나로 합친 전체 코드입니다.
import pandas as pd
import numpy as np
# 모든 값이 NaN인 다중 인덱스 생성
# names 매개변수는 인덱스 각 레벨의 이름을 설정합니다.
multiIndex = pd.MultiIndex.from_arrays([[np.nan, np.nan], [np.nan, np.nan]],
names=['a', 'b'])
# 다중 인덱스 출력
print("Multi-index...\n", multiIndex)
# 모든 레벨이 NaN인 값 삭제
# dropna()의 "how" 매개변수를 "all"로 설정하면,
# 모든 값이 NaN일 때 해당 값들이 삭제됩니다.
print("\n모든 레벨이 NaN인 값 삭제...\n", multiIndex.dropna(how='all'))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Multi-index... MultiIndex([(nan, nan),(nan, nan)],names=['a', 'b']) 모든 레벨이 NaN인 값 삭제... MultiIndex([], names=['a', 'b'])
결과 해석
출력 결과를 보면 원래 MultiIndex에는 (nan, nan) 형태의 항목이 2개 포함되어 있었습니다. 그러나 dropna(how='all')을 적용한 후에는 빈 MultiIndex(MultiIndex([], names=['a', 'b']))가 반환되었는데, 이는 모든 항목의 모든 레벨이 NaN이었기 때문에 전부 삭제되었다는 의미입니다.
참고로, how 매개변수에는 'any'도 사용할 수 있습니다. how='any'를 지정하면 레벨 중 하나라도 NaN이 있는 항목이 삭제되므로, 상황에 맞게 선택하여 사용하시기 바랍니다.