Pandas에서 index.value_counts() 메서드를 사용하면 Index 객체의 고유 값별 개수를 담은 시리즈(Series)를 반환할 수 있습니다. 이때 NaN(결측값)도 함께 세고 싶다면 dropna 매개변수에 False를 지정하면 됩니다.
기본 설정에서는 dropna가 True이기 때문에 NaN 값이 결과에서 제외되는데, False로 변경하면 NaN도 하나의 고유 값으로 간주되어 개수에 포함됩니다.
1. 라이브러리 임포트
먼저 필요한 라이브러리를 가져옵니다.
import pandas as pd
import numpy as np
2. NaN 값을 포함하는 인덱스 생성
NaN 값이 섞여 있는 Pandas 인덱스를 생성합니다.
index = pd.Index([50, 10, 70, np.nan, 90, 50, np.nan, np.nan, 30])
생성된 인덱스를 출력해 확인합니다.
print("Pandas Index...\n", index)3. NaN을 포함하여 고유 값 개수 세기
value_counts() 메서드 호출 시 dropna=False를 전달하면 NaN까지 포함한 고유 값의 개수를 구할 수 있습니다.
index.value_counts(dropna=False)
전체 예제 코드
아래는 위 과정을 모두 포함한 완전한 예제 코드입니다.
import pandas as pd
import numpy as np
# NaN 값을 포함하는 Pandas 인덱스 생성
index = pd.Index([50, 10, 70, np.nan, 90, 50, np.nan, np.nan, 30])
# Pandas 인덱스 출력
print("Pandas Index...\n", index)
# 인덱스의 요소 개수 반환
print("\nNumber of elements in the index...\n", index.size)
# 데이터의 dtype 객체 반환
print("\nThe dtype object...\n", index.dtype)
# value_counts()로 고유 값 개수 계산
# dropna 매개변수를 False로 설정하여 NaN도 함께 집계
print("\nGet the count of unique values with NaN...\n", index.value_counts(dropna=False))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Pandas Index...
Float64Index([50.0, 10.0, 70.0, nan, 90.0, 50.0, nan, nan, 30.0], dtype='float64')
Number of elements in the index...
9
The dtype object...
float64
Get the count of unique values with NaN...
NaN 3
50.0 2
10.0 1
70.0 1
90.0 1
30.0 1
dtype: int64
결과 해석
출력 결과를 보면 NaN이 총 3번, 값 50.0은 2번 등장했으며 나머지 값들(10.0, 70.0, 90.0, 30.0)은 각각 1번씩 나타난 것을 확인할 수 있습니다. 만약 dropna를 기본값인 True로 두었다면 NaN 행은 결과에서 사라지게 됩니다. 결측값의 분포까지 파악해야 하는 데이터 분석 상황에서 dropna=False 옵션은 매우 유용하게 활용됩니다.