순서
- 결측치(NaN)가 포함된 행 삭제하기 - dropna()
- 특정값/ 평균값/ 최빈값/ 중간값으로 대체하기 - fillna() / replace()
- 이전/ 이후 값으로 대체하기 - fillna() / shift()
■ 결측치(NaN)가 포함된 행 삭제하기
# 전체가 NaN인 행만 삭제 : how = 'all'
# NaN이 두 개 이상인 행만 삭제 : thresh = 2
# 특정 열에서만 결측치 확인하기 : subset = ['A_col','B_col',...]
data.dropna(axis = 0, how = 'any', inplace=True)
■ 특정 값/ 평균값/ 최빈값/ 중간값으로 대체하기 - fillna() / replace()
- fillna()
data.fillna(0, inplace=True) # 특정값
data.fillna(data.mean(), inplace=True) # 평균값
data.fillna(data.median(), inplace=True) # 중간값
# 최빈값
most_v = data['특정 열 명'].value_counts(dropna=True).idxmax()
data['특정 열 명'].fillna(most_v, inplace=True)
- replace()
data.replace(np.nan, value=0, inplace=True) # 바꾸고자 하는 값을 value에 넣으면 됨
■ 이전/ 이후 값으로 대체하기 - fillna() / shift()
- fillna()
# limit = ? 로 이전/이후의 값으로 채우는 회수를 제한할 수 있음
data.fillna(method='ffill', inplace=True) #이전값으로 대체 (method='pad'도 가능)
data.fillna(method='bfill', inplace=True) #이후값으로 대체 (method='backfill'도 가능)
- shift()
# shift(1)의 직관적 해석 : 한 칸씩 밀겠다 -> 이전 값이 현재 값으로 밀렸다
data['A_col'][data['A_col'].isna()] = data.shift(1)['A_col'][data['A_col'].isna()] # 이전값
data['A_col'][data['A_col'].isna()] = data.shift(-1)['A_col'][data['A_col'].isna()] # 이후값
'Data Handling > Data Preprocessing' 카테고리의 다른 글
피쳐 스케일링 (Feature Scaling) (0) | 2020.07.27 |
---|---|
범주형 변수 처리 - 인코딩(Encoding) (0) | 2020.06.20 |
훈련, 테스트 데이터 통합하기 (0) | 2020.06.18 |
시간별 데이터를 일자별 데이터로 변환하기 (0) | 2020.06.02 |
시계열 특징(년, 월, 일, 주말 등) 쉽게 추출하기 - to_datetime() (0) | 2020.06.01 |