KT AIVLE SCHOOL/review

Pandas에서 결측값(NaN) 처리하기

하웅이 2023. 10. 30. 22:46

결측값

- 데이터셋에서 값이 누락된 항목

- 판다스에서는 결측값을 NaN (Not a Number)으로 표현함

- 다른 표현으로는, Null, NA, None 등이 있음

 

- 처리 방법 : 결측치 제거 / 결측치 대체 / 결측치 표시


결측치 확인

isnull() / isna() : 결측치 위치 확인

df.isnull() #위치 확인
df[df.isnull()] #셀 값 확인
df.isnull().sum() #개수 확인

 

notnull() / notna() : 결측치 아닌 위치 확인

df.notnull() #위치 확인
df[df.notnull()] #셀 값 확인
df.notnull().sum() #개수 확인

 


1. 결측치 제거

결측치가 너무 너무 많다 ? → 변수 삭제 (axis=1)

df.dropna()  #결측치가 있는 행 삭제
df.dropna(axis=1)  #결측치가 있는 열 삭제

 

2. 결측치 대체

 1) 기초통계량을 활용한 대체

df.fillna(df.mean()) #평균 대체
df.fillna(df.median()) #중앙값 대체
df.fillna(df.mode().iloc[0]) #최빈값 대체

 

 2) 도메인 지식을 바탕으로 대체

df.replace(np.nan, 0)  #결측값 → 0

 

3) 예측 모델 활용

#KNN알고리즘을 활용한 결측치 대체법
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=2)
df_imputed = imputer.fit_transform(df)
df_imputed = pd.DataFrame(df_imputed, columns=df.columns)

 

4) 전진 채우기 or 후진 채우기

df.fillna(method='ffill') #전진 채우기
df.fillna(method='bfill') #후진 채우기

 

5) 보간법

#선형보간 (default)
df.interpolate(method='linear', axis=0, limit_direction='forward', inplace=False, limit_area=None, downcast=None)

  interpolate() 함수의 주요 파라미터

 • method (보간 방법) : linear(기본값), polynomial, spline, barycentric 등

 • axis (보간 수행 축) : 0(기본값, 행방향), 1(열방향)

 • limit (보간 최대 개수) : None(기본값; 모든 연속된 결측치를 보간해라)

 • inplace (데이터프레임 변경유무) : True(데이터셋 지정금지), False(기본값)

 • limit_direction (보간 방향) : forward(기본값)  , backward, both

 • limit_area (보간 발생 영역 지정) : inside, outsude, None(기본값)

 • downcast (보간 후 다운캐스트 유형) : None(기본값)

 

3. 결측치 표시

- 결측치 표시용으로 -999와 같은 터무니없는 값으로 대체하기도 함

- 데이터 분포가 왜곡될 수 있으므로 주의

df.fillna(-999)