데이터 핸들링/데이터 전처리

결측치 (Missing Value) 처리하기

jeongpil 2021. 7. 12. 13:36

오늘은 데이터 세트의 결측치를 처리하는 방법에 대해 알아보겠습니다.

 

결측치가 있으면 머신러닝 알고리즘이 제대로 역할을 하지 못하기 때문에 결측치를 처리해주는 것이 중요합니다.

 

파이썬에서 결측치는 NaN으로 표기됩니다. 판다스로 결측치를 처리하는 방법에 대해 알아보겠습니다.

 

1. 결측치 확인

2. 결측치 제거

3. 결측치 대체

 

1. 결측치 확인

- isnull()

#결측치 여부 확인
df['col'].isnull()

 

# 결측치 개수 확인
df['col'].isnull().value_counts()

 

 

2. 결측치 제거

- dropna()

# 디폴트 값 axis=0, 'any' 이므로 결측치가 있는 행 모두 삭제
df.dropna()

# axis 가 1이면 열, axis가 0이면 행

# 행에 하나라도 결측치가 있으면 행 제거
df.dropna(axis=0,how='any')

# 열이 모두 결측치면 열 제거
df.dropna(axis=1,how='all')

# 행의 결측치가 thresh 값 초과인 행 삭제 ( axis=0 이 디폴트)
df.dropna(thresh=2)

# 특정 열에 결측치가 있을 경우 해당 행을 삭제
df.dropna(subset=['col1','col2'])

 

 

3. 결측치 대체

-fillna()

# 특정값으로 대체
df.fillna(0, inplace=True)

# 평균값으로 대체
df.fillna(df.mean(),inplace=True)

# 중간값으로 대체
df.fillna(df.median(), inplace=True)

# 최빈값으로 대체
most_value=data['특정 열'].value_counts(dropna=True).idxmax()
df['특정 열'].fillna(most_value,inplace=True)

# 이전 값으로 대체
df.fillna(method='pad')
df.fillna(method='ffill')

# 이후 값으로 대체
df.fillna(method='bfill')
df.fillna(method='backfill')

-replace()

# 결측치를 value 값으로 대체
df.replace(np.nan, value=0, inplace=True)

-shift()

# shift 매개변수 값만큼 이동

#이전 값으로 대체
df['col1'][df['col1'].isnull()]=df.shift(1)['col1'][df['col1'].isnull()]

#이후 값으로 대체
df['col1'][df['col1'].isnull()]=df.shift(-1)['col1'][df['col1'].isnull()]