데이터 전처리 과정에서 범주형 데이터를 수치형으로 변환해야 하는 경우가 자주 있습니다. 이 글에서는 판다스(Pandas)의 get_dummies 함수를 사용하여 시리즈(Series)를 더미 변수로 변환하고, 데이터에 NaN 값이 존재할 경우 이를 제외하는 방법을 알아보겠습니다.
예를 들어, 성별 정보를 담고 있는 시리즈가 있을 때 이를 더미 변수로 변환하면 다음과 같은 결과를 얻을 수 있습니다.
Female Male
0 0 1
1 1 0
2 0 1
3 1 0
4 0 1
5 0 0
6 1 0
7 1 0
여기서 주목할 점은 인덱스 5번 행입니다. 원본 데이터가 NaN이었기 때문에 Female과 Male 열 모두 0으로 표시됩니다. dummy_na=False 옵션을 사용하면 NaN 값이 별도의 열로 생성되지 않고 제거된 상태로 처리됩니다.
해결 방법
이 문제를 해결하려면 아래 단계를 따르면 됩니다.
- 'Male'과 'Female' 요소를 포함하는 리스트를 생성하고 이를 판다스 시리즈로 변환합니다.
- 시리즈에
get_dummies함수를 적용하고,dummy_na매개변수를 False로 설정하여 NaN 값을 별도 카테고리로 처리하지 않도록 합니다.
pd.get_dummies(series, dummy_na=False)
예제 코드
아래 예제 코드를 통해 실제 동작 방식을 확인해 보겠습니다.
import pandas as pd
import numpy as np
gender = ['Male','Female','Male','Female','Male',np.nan,'Female','Female']
series = pd.Series(gender)
print("Series is:\n",series)
print("Dummy code is:\n", pd.get_dummies(series, dummy_na=False))
실행 결과
Series is:
0 Male
1 Female
2 Male
3 Female
4 Male
5 NaN
6 Female
7 Female
dtype: object
Dummy code is:
Female Male
0 0 1
1 1 0
2 0 1
3 1 0
4 0 1
5 0 0
6 1 0
7 1 0
코드 설명
- 데이터 준비: 'Male'과 'Female' 문자열이 섞여 있는 리스트에
np.nan을 하나 포함시켜 결측치 상황을 재현했습니다. - 더미 변수 변환:
pd.get_dummies()함수는 각 고유 범주값('Female', 'Male')을 개별 열로 만들고, 해당 여부를 0과 1로 표시합니다. - NaN 처리:
dummy_na=False(기본값)로 설정하면 NaN 값은 어떤 열에도 1로 기록되지 않으며, 모든 더미 열이 0인 행으로 남게 됩니다. 반대로dummy_na=True로 설정하면 NaN 전용 열이 추가로 생성됩니다.
이처럼 get_dummies 함수는 머신러닝 모델 학습 전 범주형 변수를 인코딩할 때 매우 유용하게 활용되며, 결측치 처리 옵션까지 함께 조절할 수 있어 데이터 전처리 작업의 효율을 높여줍니다.