Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 판다스로 시리즈를 더미 변수로 변환하고 NaN 값 제거하는 방법

데이터 전처리 과정에서 범주형 데이터를 수치형으로 변환해야 하는 경우가 자주 있습니다. 이 글에서는 판다스(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 함수는 머신러닝 모델 학습 전 범주형 변수를 인코딩할 때 매우 유용하게 활용되며, 결측치 처리 옵션까지 함께 조절할 수 있어 데이터 전처리 작업의 효율을 높여줍니다.