[pandas] 데이터 전처리 – 결측치 처리 방법

지난 포스팅에 이어서 이번에도 파이썬 pandas로 데이터 전처리하는 방법을 소개한다. 이번엔 결측치 처리다.

1. 결측치 직접 확인

결측치를 직접 보고 싶다면 일단 df.isnull()을 찍어보면 된다. 그러면 누락된 데이터는 True로 돌려준다.

그러나 데이터가 많은 경우에는 모두 확인할 수 없으니 df.isnull().sum()으로 누락된 데이터 개수를 확인하면 된다. 각 열별로 결측치가 몇개 있는지 돌려준다.

2. 결측치 시각화

결측치를 시각화해서 한 눈에 보고 데이터 구조를 파악하는 게 더 직관적일 수 있다. 두 가지 방법을 소개한다.

1) seaborn으로 시각화

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

sns.heatmap(df.isnull(), cbar=False)
plt.show()

2) missingno로 시각화

missingno는 결측치를 좀 더 편리하게 다룰 수 있는 라이브러리다. cmd에 pip install missingno 라고 치면 바로 설치될 거다. (여담이지만 missingno, 미싱노는 전설의 포켓몬(?) 이름이다. 자세한 내용은 위키피디아(영문)나무위키 문서를 참고하자. 아무튼 이거 개발한 사람이 아마 포켓몬을 좋아하는 것으로 보인다.)

import missingno as msno

msno.matrix(df)
plt.show()
import missingno as msno

msno.bar(df)
plt.show()

쉽다.

3. 결측치 처리 방법

1) df.dropna() – 삭제

결측치를 가진 행을 모두 삭제해버리는 (속 편한) 방법이 있다. 이렇게 하면 끝이다.

df = df.dropna()

그런데 그냥 쓰면 어떤 열에 결측치가 있든 무조건 삭제하는 거라…

만약 특정 행에 결측치가 있을 경우 삭제하고 싶다면 이렇게 subset을 지정해주면 된다.

df = df.dropna(subset=["column_name"])

2) df.fillna() – 대체

결측치를 다른 값으로 대체하는 것도 대안이 될 수 있다.

그냥 약속된 값 정해서 넣을 수도 있지만, 해당 열의 평균치와 같은 계산된 값을 넣을 수도 있다.

df.fillna()를 사용하고, 괄호 안에value는 딕셔너리 형태로 ‘어떤 컬럼의 결측치는 어떤 값으로 대체한다’는 걸 지정해주면 되겠다.

df['column_name'] = df['column_name'].fillna(value_to_fill_in)

뭐… 엄밀한 방법은 아니라서 자주 사용하진 않지만, 특정 분석을 위해 이렇게 다른 값으로 대체해놓을 필요가 있을 수도 있다.


일단 오늘은 여기까지.

어쨌든 데이터 분석은
결측치 처리부터 시작이다.

추천 글

“[pandas] 데이터 전처리 – 결측치 처리 방법”의 1개의 댓글

댓글 남기기