본문 바로가기
Python/Basic Data Analysis

[Python] Missing Data(NA, NaN) 처리

by JKyun 2017. 12. 6.

안녕하세요. 우주신 입니다.


데이터 분석에 있어 가장 중요한 과정은 결측값 및 특이값을 얼마나 잘 처리하는지의 유무에 달려 있다고 생각하는데요,

오늘은 pandas를 이용하여 NA, NaN 데이터를 처리하는 몇가지 방법을 포스팅 하겠습니다.


df.dropna(), df.fillna()


우선, 결측값이나 특이값을 처리하는 3가지 방법이 있습니다.


1. 무시한다

2. 제거한다

3. 다른 값으로 대체한다


먼저, pandas와 numpy를 이용해 NaN 값이 포함된 데이터프레임을 만들었습니다.




1. 첫번째 방법은 아주 쉬워요. 그냥 무시하시면 됩니다.

물론, 추후에 데이터 분석을 하는 데 있어 걸리적거리겠죠..



2. df.dropna()


NaN이 들어간 행 전체를 제거하는 방법에 대해 보겠습니다.



첫번째 줄 df.dropna()을 실행하고 출력 했습니다.

데이터프레임에 값이 존재하지 않습니다.

데이터프레임 df를 보면 모든 행에 최소 1개의 데이터가 NaN을 포함하고 있습니다.

즉, df.dropna()를 통해 NaN이 하나라도 들어가 있는 행은 그 행 전체를 제거합니다.


두번째 줄 df.dropna(how = 'all')을 실행하고 출력 했습니다.

마지막 행 빼고 모두 출력 됐습니다.

즉, how = 'all' 기능을 통해 모든 데이터 값이 NaN인 행만 제거했습니다.



3. df.fillna()


마지막으로 NaN 값을 다른 값으로 대체하는 방법에 대해 보겠습니다.


특정 값을 df.fillna() 인풋으로 입력해주면 모든 NaN 값이 다 바뀝니다.

0을 넣어봤습니다.


모든 NaN 값이 0으로 바뀐 것을 확인할 수 있습니다.


이번에는 열마다 다른 값을 입력하여 NaN 값을 변경해보겠습니다.


a에는 0이 b에는 1이 c에는 -9999로 데이터가 변경됐습니다.


연속된 NaN 값 중 몇번째 값까지 변경할지도 지정할 수 있습니다.

df.fillna(data, limit = )


각 열에서 2번째 NaN까지 값들이 변경된 것을 확인할 수 있어요.


마지막으로, df.fillna(method = ) 기능 입니다.

method = ffillmethod = bfill을 비교해 보겠습니다.

먼저, ffill을 넣었을 때,


3행을 보시면 NaN의 값이 그 앞 데이터로부터 채워진 것을 확인할 수 있어요.


bfill은 반대로,


NaN의 값이 그 뒤 데이터로부터 채워진 것을 확인할 수 있습니다.





수고하셨습니다~

댓글1