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)