파이썬 판다스 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
이상으로 파이썬 판다스에서 결측치 대치 방법에 대해 정리한 포스팅을 마치겠습니다.
감사합니다.
'Python > Pandas' 카테고리의 다른 글
[Pandas] json 파일 <-> 데이터프레임 변환 : to_json, read_json (0) | 2022.04.01 |
---|---|
[Pandas] 파이썬 결측치 포함 행, 열 제거 dropna 함수 사용법 (2) | 2022.03.07 |
[Pandas] 파이썬 결측치 확인 방법 : isnull, notnull (0) | 2022.03.06 |