본문 바로가기
data-science

Pandas 공부하기 : 누락된 데이터 처리

by MOOB 2019. 12. 8.

다음 글은 < 파이썬 라이브러리를 활용한 데이터 분석>을 공부한 내용입니다.

데이터를 분석할 때 모든 데이터가 완전히 채워저 있는 일은 드물다. 값이 잘못된 경우, 데이터 타입이 잘못된 경우, 비어있는 경우 등이 있는데 데이터가 비어 있는 경우를 누락 데이터라 부른다.

누락 데이터 처리 과정은 누락 데이터가 충분한 외부 데이터를 사용하기로 했다. 실험에 사용한 파일은 다음 링크를 통해 다운로드 받을 수 있다. 실행 환경은 google colab이다.

google colab에서 내 컴퓨터 내에 있는 파일을 가져오기 위해 제일 먼저 다음 코드를 친다.

from google.colab import files  
uploaded = files.upload()  
for fn in uploaded.keys():  
print("uploaded")

외부 데이터를 가져왔기 때문에 먼저 데이터 내용을 파악할 필요가 있다. 다음 코드를 사용해서 데이터의 내용을 대략적으로 파악하기로 했다.

from pandas import Series, DataFrame  
import pandas as pddata = pd.read\_csv('train.csv')  
print(data.head())

train.csv의 안을 확인한 모습

실제 데이터는 900 rows x 500 columns 정도의 크기지만, 여기서 우리는 데이터 분석을 실제로 하는 게 아니라 누락 데이터 처리 연습을 할 것이기 때문에 누락 데이터가 있는 부분만 알기 쉬운 형태로 바꾸도록 하겠다.

df = DataFrame(df, columns =  
\['45.038', '3.498', '0.0096729', '0.0031605', '0.065201'\])  
df.columns = \[0, 1, 2, 3, 4\]  
print(df)

최종 데이터 형태


누락값인지 확인하기

현재는 데이터를 5x5로 축소했기 때문에 누락값이 무엇인지 한번에 확인할 수 있지만, 실제 데이터 조작을 할 경우 맨 처음 형태의 train.csv 와 같거나 크기가 큰 데이터를 다루게 될 것이다. 그럴 땐 누락값만, 또는 누락값이 아닌 값만을 따로 조작해야 할 경우 다음 함수를 이용하면 편리할 것이다.

  • isnull() : 데이터가 NaN(누락값)인 경우 True를 반환
  • notnull() : 데이터가 NaN(누락값)인 경우 False를 반환

df.isnull()


데이터 누락 처리하기

데이터 누락을 처리할 때 일반적으로 가장 먼저 사용하게 되는 방법이 dropna이다. dropna는 누락값을 삭제하는 함수로 누락값의 영향 없이 전체 값을 확인하고 싶을 때 사용하면 편리하다.

dropna

  • df.dropna() : 하나 이상의 열에 누락된 값이 있는 경우 전부 삭제
  • df.dropna(how=’all’) : 해당 행의 모든 값이 누락된 경우 삭제
  • df.dropna(axis=1, thresh=n) : 열에서 NaN이 아닌 값이 최소 n개 이상 나오면 남김

df.dropna() # () 내부에 아무런 값을 설정해 주지 않으면 모든 누락값을 삭제함

df.dropna(how='all') #행의 모든 값이 누락일 경우 삭제,

#우리의 데이터는 행 전체 누락이 없으므로 원본 그대로

df.dropna(axis=1, thresh=5) #모든 열이 1개의 누락값을 가지고 있어 5 이하는
#원본 데이터가 그대로 나옴

데이터 누락값 채우기

  • df.fillna(0) : 모든 누락 값을 같은 값으로 채우기, 이 경우 ‘0’
  • df.fillna(method=’pad’) : 누락값을 같은 열의 이전 행으로 채우기
  • df.fillna(method=’bfill’) : 누락값을 같은 열의 다음 행으로 채우기

df.fillna(method='pad')

df.fillna(method='bfill') # belowfill 그 다음 열 값으로 채움

df.fillna({1: 200, 3: 100}) #{n:m}일 때, n열에 있는 누락값에 m값 채우기

다음과 같은 함수를 사용해 누락값을 조작할 수 있지만, 새 행렬의 값을 누락값에 채우는 방법도 있다.

먼저 다음과 같은 행렬을 만들어 준다.

import numpy as np  
df2 = pd.DataFrame(np.arange(1, 26).reshape(5, 5))  
df2

df.fillna(df2)

다음과 같이 df.fillna(df2) 를 해주면 원본 데이터 df 에 누락값이 존재할 경우 동일한 위치의 df2 의 값을 df 에 채워준다.

다음 mean() 은 평균을 뜻하기 때문에 누락값에 해당 열의 평균 값을 누락값에 채운다.

df.fillna(df.mean())

댓글