-
[파이썬] 결측값 처리하는 6가지 방법 (fillna, SimpleImputer)파이썬 배우기 2023. 11. 22. 17:42
오늘은 결측값 처리하는 법에 대해 소개하려합니다.
결측값을 처리해야하는 이유는 결측값이 많으면 데이터의 특성을 제대로 파악하기 어려워서 잘못된 인사이트를 도출하게 되고, 모델을 학습시킬 때 모델의 성능이 크게 저하되어 잘못된 결과를 도출하기 때문입니다. 비즈니스에서 적용시에는 도메인과 데이터의 특성에 따라 결측치 처리하는 법을 논의 후 의사결정하시고 적용하시면 됩니다.
[결측값 처리하는 법]
1. 결측값이 있는 행 삭제
2. 의미있는 값으로 직접 채워넣기
3. 주변 값들로 대체
4. 대표값으로 채워넣기
5. 그룹별 대표값으로 채워넣기
6. 사이킷런의 SimpleImputer 함수 사용하여 대표값으로 대체
1. 결측값이 있는 행/열 삭제 - 가장 정확한 방법일 수 있지만, 가장 위험할 수도 있습니다. 결측치의 비중에 따라 삭제할지, 채워넣을지 고민해야합니다.
# 결측값 비중 확인하기 train.isna().sum()/len(train) # 결측값이 있는 행 삭제 train.dropna() # 결측값이 있는 열 삭제 train.dropna(axis = 1)
* dropna 파라미터 종류 설명
- axis : 0이면 행이 삭제되고, 1이면 열이 삭제된다.
- how : 'any' 이면 하나라도 결측이면 삭제, 'all'이면 모든 값이 결측일 때 삭제
- thresh : 임계치를 설정해서, 임계치 이상의 결측치를 가지고 있는 행/열 삭제
- subset : 원하는 컬럼내 있는 결측값만 확인하여 처리
- inplace : 기본은 False 이며, True 바꾸면 원본에 바로 적용2. 비즈니스적으로 의미가 있거나 원인을 알고 있다면, 기준에 따라 직접 채워넣기
# 비어있는 값의 의미가 있다면, 예를 들어 점수가 0점이거나 미응시거나 등 train['score'].fillna(0) train['score'].fillna('미응시')
3. 주변 값들로 대체 fillna()
# 앞 데이터로 채우기 train.fillna(method = 'ffill') # ffill 또는 pad # 뒤 데이터로 채우기 train.fillna(metod = 'bfill') # bfill 또는 backfill # 앞과 뒤 행의 평균값으로 보간 train.fillna(df.interpolate())
4. 대표값으로 채워넣기
# 열의 평균값으로 채워넣기 train.fillna(train.mean()) # 열의 중위값으로 채워넣기 train.fillna(train.median())
5. 그룹별 대표값으로 채워넣기 : groupby + apply + lambda
# 결측치 대체값 확인용 train.groupby('gender').mean() # 그룹별 평균값으로 대체 train.groupby('gender').apply(lambda x:x.fillna(x.mean())
6. 사이킷런의 SimpleImputer 함수 사용하여 대표값으로 대체
from sklearn.impute import SimpleImputer mean_imp = SimpleImputer(strategy= 'mean') train['score'] = mean_imp.fit_transform(train[['score']]).ravel() # fit_transform 은 strategy를 기준으로 계산하는 fit과 결측치를 채워주는 transform가 합쳐진 것입니다. # 위 코드와 아래 코드는 동일하다 # mean_imp = SimpleImputer(strategy= 'mean') # mean_imp.fit(train['score']) # train['score'] = mean_imp.transform(train['score']) # 참고 : ravel() 은 다차원 배열(array)을 1차원 배열로 평평하게 펴주는 NumPy 함수
* SimpleImputer 파라미터 종류 설명
- missing_values : 어떤 값을 결측치라고 할 것인가. (np.nan가 디폴트이지만, 데이터셋에 따라 -1, 999, 빈칸 등 다양하다)
- strategy : 채울 값에 대한 기준이 되는 함수 (mean, median, most_frequent, constant(임의의 지정값))
- fill_value : strategy='constant' 일 때 어떻게 지정할지 부여
'파이썬 배우기' 카테고리의 다른 글
[파이썬] 한국어 텍스트 데이터 전처리 예제 (1) 토큰화, 클렌징, 빈도수 탐색 (2) 2023.12.10 [파이썬] 파이썬에서 SQL 실행하기 (sqlite3) (0) 2023.11.24 [파이썬] pandas 데이터프레임 속성값 바꾸기 (apply, replace) (1) 2023.11.22 [파이썬] pandas 데이터프레임 속성값 세는 두 가지 방법 (1) 2023.11.22 [파이썬] matplotlib 맥 윈도우 한글 깨짐 인코딩 처리하기 (1) 2023.11.21