Python/Pandas

[Pandas] 파이썬 결측치 대치하기(전체 열/특정 열 대체와 0, 평균 값, 보간 대체) : fillna

jimmy_AI 2022. 3. 14. 20:41
반응형

파이썬 판다스 NaN 값 대체 방법 정리 : fillna 사용법

안녕하세요. 이번 글에서는 파이썬 판다스 라이브러리에서 데이터프레임의

전체 column 혹은 일부 column의 결측값을 0, 평균 값 혹은 보간 값 등으로 대체하는

방법에 대하여 총정리해보도록 하겠습니다.

 

이해를 돕기 위하여 아래와 같은 간단한 데이터프레임이 있다고 가정해보겠습니다.

import pandas as pd
import numpy as np

a = {'A' : [1, np.nan, 3, np.nan, 5, np.nan], 'B' : [np.nan, 20, np.nan, 40, np.nan, 60]}
df = pd.DataFrame(a)
df

 

 

전체 column 결측치 0 대치 : df.fillna(0)

0 혹은 다른 특정 값으로 결측치를을 대체하고 싶다면 df = df.fillna(원하는 값)

형태로 작성해주시면 됩니다.

df = df.fillna(0)

df

모든 column의 NaN이 저장되어있던 위치의 값들이 전부 0으로 대체되었습니다.

 

 

특정 column 결측치 0 대치 : df.loc[df['A'] != df['A'], 'A'] = 0

만일, 일부 열의 결측값만 대체하고 싶다면 np.nan != np.nan 이라는 성질을 이용하여

아래와 같은 loc 함수를 활용한 조건부 대입 구문을 사용하여 진행할 수 있습니다.

df.loc[df['A'] != df['A'], 'A'] = 0

df

A열의 NaN 값들만 0으로 대체되었습니다.

반응형

결측치 평균 값 대치 : df.fillna(df.mean())

결측 값을 각 열의 평균 값으로 대체하는 방법은 df.fillna(df.mean())으로 채워주시면 됩니다.

 

먼저, 데이터프레임 모든 column의 NaN 값을 평균 값으로 대치하는 예시입니다.

df = df.fillna(df.mean())

df

A열과 B열 모두 각 열의 평균인 3과 40으로 대체가 완료되었습니다.

 

이번엔 특정 column의 결측치만 평균으로 대치하는 예시입니다.

df.loc[df['A'] != df['A'], 'A'] = df['A'].mean()

df

A열의 결측 값들만 평균 값인 3으로 변경되었습니다.

 

 

결측치 보간 방법 : ffill, bfill, interpolate

결측치를 보간하는 방법은 여러가지가 있는데, 가장 최근의 앞에 등장한 값으로 보간하려면

method = 'ffill' 혹은 'pad'로 fillna 함수 내 argument를 지정해주시면 됩니다.

df = df.fillna(method = 'ffill') # df = df.fillna(method = 'pad')

df

NaN 값들이 바로 위의 행에 등장했던 값으로 변경이 되었는데, B열의 첫 번째 행은

더 앞에 등장한 유효한 값이 없으므로 결측치로 남아있는 것을 확인할 수 있었습니다.

 

만일, 가장 최근으로 뒤에 등장한 값으로 보간하려면 method = 'bfill' 혹은 'backfill'

지정해주시면 됩니다.

df = df.fillna(method = 'bfill') # df = df.fillna(method = 'backfill')

df

이번에는 A열의 마지막 행의 값이 결측치로 남은 것을 볼 수 있었습니다.

 

마지막으로, 가장 최근의 앞과 뒤 행의 값의 평균으로 보간하고 싶은 경우에는

df.interpolate()로 fillna 함수 내의 input을 지정해주시면 됩니다.

df = df.fillna(df.interpolate())

df

다만, 이 경우에도 최근 앞의 유효한 값이 없는 경우에는 NaN 값으로 남아있게됩니다.

 

만일, 결측치를 다른 값으로 바꾸려는 것이 아니라 제거하는 방법이 궁금하시다면

아래 링크의 포스팅을 참고하시면 됩니다.

 

[Pandas] 파이썬 결측치 포함 행, 열 제거 dropna 함수 사용법

판다스 데이터프레임 NaN 값 포함 위치 제거 방법(pd.dropna) 안녕하세요. 지난 글에서 다루었던 데이터프레임 내 결측값의 위치를 찾는 방법에 이어, 이번 글에서는 결측치를 포함하고 있는 행이나

jimmy-ai.tistory.com

이상으로 파이썬 판다스에서 결측치 대치 방법에 대해 정리한 포스팅을 마치겠습니다.

감사합니다.