본문 바로가기
데이터 분석/데이터 전처리

[Pandas] 22. Transform을 이용하여 그룹별 통계값으로 결측치 대체하기

by 부자 꽁냥이 2022. 4. 3.

안녕하세요~ 꽁냥이입니다.

 

데이터 분석을 하다 보면 결측치를 자주 만나게 됩니다. 데이터 분석가라면 이를 제거할지 대체할지 그리고 대체한다면 어떤 값으로 대체할지 선택하는 것은 굉장히 중요한 문제이지요. 

 

만약 결측치를 특정값으로 대체한다고 해볼게요. 이때 데이터가 룹(또는 범주)이 있다면 그룹별 통계값으로 결측값을 대체하는 것도 생각해봐야할 것입니다. 왜냐하면 그룹별 특성을 반영하여 결측치를 대체하는 것이 합리적이기 때문이지요.

 

이번 포스팅에서는 그룹별 통계값으로 결측치를 대체하는 방법에 대해서 알아보겠습니다. 결측치 처리에 대한 일반적인 내용은 지난 포스팅에서 다루었으니 참고하시면 되겠습니다.

 

여기서 다루는 내용은 다음과 같습니다.

 

1. 데이터 만들기

2. 그룹별 통계값 확인

3. 결측치 대체

LIST

   1. 데이터 만들기

먼저 이번 포스팅에서 사용할 데이터를 만들어 줍시다~ 곳곳에 결측값 대체를 위해 결측치를 넣어 주었습니다. 그리고 그룹(Gender)은 성별을 사용했습니다.

 

import pandas as pd
import numpy as np

data = {
    'Gender' : ['Male', 'Male', 'Female', 'Female', 'Male','Male','Male','Male','Female', 'Female'],
    'Fruit' : ['Apple',np.nan,'Banana','Apple',np.nan,'Strawberry','Banana','Banana','Apple', np.nan],
    'Age' : [20, 14, 13, 22, 14, 32, 31, 22,23, 33],
    'Height' : [187,np.nan,155,165,177,np.nan,170,179,np.nan, 166]
}
df = pd.DataFrame(data)

 


   2. 그룹별 통계값 확인

결측치를 대체하기 전에 그룹별 통계값을 확인해보려고 합니다. 실제로 값이 제대로 들어갔는지 확인해보기 위함이지요.

 

먼저 그룹별 Fruit의 최빈값을 확인합니다(Fruit의 결측값을 그룹별 최빈값으로 대체할 것입니다).

 

print('Male : ', df[df['Gender']=='Male']['Fruit'].mode()[0])
print('Female : ', df[df['Gender']=='Female']['Fruit'].mode()[0])

 

 

확인해보니 Male 그룹의 Fruit 최빈값은 Banana, Female 그룹은 Apple인 것을 확인할 수 있습니다.

 

이번엔 그룹별 Height의 평균값을 확인합니다(Height의 결측값을 그룹별 평균값으로 대체할 것입니다).

 

print('Male : ', df[df['Gender']=='Male']['Height'].mean())
print('Female : ', df[df['Gender']=='Female']['Height'].mean())

 

 

확인 결과 Male 그룹의 Height 평균값은 178.25, Female 그룹은 162 인 것을 확인할 수 있습니다.

 

반응형

   3. 결측치 대체

이제 그룹별로 계산된 통계값을 대체해보겠습니다. Pandas의 transform을 이용하면 가능합니다.

 

먼저 Fruit 결측치를 대체하겠습니다. 

 

df['Fruit'].fillna(df.groupby('Gender')['Fruit'].transform(lambda x: x.value_counts().idxmax()), inplace=True)

 

 

앞서 살펴보았던 그룹별 Fruit의 최빈값이 잘 채워진 것을 확인할 수 있습니다.

 

이번엔 그룹별 Height의 평균값으로 대체해보겠습니다.

 

df['Height'].fillna(df.groupby('Gender')['Height'].transform('mean'), inplace=True)

 

 

그룹별 Height의 평균값이 잘 대체된 것을 알 수 있습니다.


이번 포스팅에서는 그룹별 통계값을 결측값으로 대체하는 방법을 알아보았습니다. 알아두시면 매우 유용하게 써먹을 수 있을 거예요.

 

다음 포스팅에서도 좋은 주제로 찾아뵙겠습니다. 글 읽어주셔서 감사하고 안녕히 계세요~

 


댓글


맨 위로