Pandas에서 인덱스(Index)에 포함된 NaN(결측값)을 특정 값으로 마스크하고 대체하려면 index.putmask() 메서드를 사용합니다. 이때 조건으로 index.isna() 메서드를 함께 지정하면 NaN 위치만 정확히 찾아 원하는 값으로 바꿀 수 있습니다.
putmask() 메서드란?
putmask()는 첫 번째 인자로 전달된 조건이 True인 위치의 값을 두 번째 인자로 지정한 값으로 교체하는 메서드입니다. 따라서 index.isna()를 조건으로 넘기면 NaN인 요소만 선택적으로 대체됩니다.
필수 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import pandas as pd import numpy as np
NaN이 포함된 Pandas 인덱스 생성
np.nan을 포함하는 리스트로 Pandas 인덱스를 만들어 보겠습니다.
index = pd.Index([5, 65, 10, np.nan, 75, np.nan])
생성된 인덱스를 출력해 확인합니다.
print("Pandas Index...\n", index)NaN 값을 특정 값으로 마스크 및 대체
index.isna()를 조건으로 사용하고, 대체할 값으로 111을 지정합니다.
print("\nMask...\n", index.putmask(index.isna(), 111))전체 예제 코드
지금까지의 내용을 하나의 코드로 정리하면 다음과 같습니다.
import pandas as pd
import numpy as np
# NaN이 포함된 Pandas 인덱스 생성
index = pd.Index([5, 65, 10, np.nan, 75, np.nan])
# Pandas 인덱스 출력
print("Pandas Index...\n", index)
# 인덱스의 요소 개수 반환
print("\nNumber of elements in the index...\n", index.size)
# NaN 값을 특정 값(111)으로 마스크 및 대체
print("\nMask...\n", index.putmask(index.isna(), 111))실행 결과
위 코드를 실행하면 아래와 같은 출력 결과를 얻을 수 있습니다.
Pandas Index... Float64Index([5.0, 65.0, 10.0, nan, 75.0, nan], dtype='float64') Number of elements in the index... 6 Mask... Float64Index([5.0, 65.0, 10.0, 111.0, 75.0, 111.0], dtype='float64')
결과 해석
출력 결과를 보면 원본 인덱스에서 NaN이었던 세 번째와 여섯 번째 요소가 모두 111.0으로 대체된 것을 확인할 수 있습니다. 나머지 값(5.0, 65.0, 10.0, 75.0)은 그대로 유지되며, 인덱스의 dtype은 float64로 유지됩니다.
참고로 최신 버전의 Pandas에서는 Float64Index가 deprecated되고 일반 Index 객체로 통합되었지만, putmask()와 isna()를 활용한 NaN 처리 방식은 동일하게 적용됩니다. 이 방법은 Series나 DataFrame의 결측값 처리에도 응용할 수 있어 데이터 전처리 과정에서 매우 유용하게 활용됩니다.