세상을 바꾸는 데이터

[Pandas] 판다스 - 결손 데이터 처리하기 본문

ML/Pandas

[Pandas] 판다스 - 결손 데이터 처리하기

Industriousness 2022. 1. 26. 19:00

 

이번 포스트에서는 값이 없는 결손 데이터를 처리하는 방법에 대해 알아보고자 한다.

판다스는 결손 데이터(missing data)를 처리하는 편리한 API를 제공한다. 결손 데이터칼럼에 값이 없는 NULL인 경우를 의미하며, 이를 넘파이의 NaN으로 표시한다.

기본적으로 머신러닝 알고리즘은 이 NaN 값을 처리하지 않으므로 이 값을 다른 값으로 대체해야 한다.  NaN 값은 평균, 총합 등의 함수 연산 시 제외가 된다. 

import numpy as np
import pandas as pd
titanic_df = pd.read_csv('titanic_train.csv')

 

캐글(kaggle)에서 사용되는 연습 데이터셋인 타이타닉(titanic) 데이터를 이용한다. 

타이타닉 데이터셋 다운 및 자세한 내용은 다음 포스트를 참고하면 된다.

https://data-flower.tistory.com/9?category=949030 

 

[Pandas] 판다스 - 파일을 DataFrame으로 불러오기, 기본 API

새로운 주피터 노트북을 생성하고 판다스 모듈을 임포트 한다. import pandas as pd 다음으로 데이터 파일을 판다스의 DataFrame으로 로딩할 것이다. 사용할 데이터 파일은 캐글의 대표 연습 파일인 타

data-flower.tistory.com


NaN 여부 확인하기 isna( )

  • DataFrame.isna( )

DataFrame에 isna( )를 수행하면 모든 칼럼의 값이 NaN인지 아닌지를 True나 False로 알려준다.

titanic_df.isna().head(3)

 

[Output]

True값은 Null, False값은 Not Null 

 

결손 데이터의 개수를 isna( ) 결과에 sum( ) 함수를 추가해 구할 수 있다. sum( )을 호출 시 True는 내부적으로 숫자 1, False는 숫자 0을 변환하므로 결손 데이터의 개수를 구할 수 있다.

titanic_df.isna( ).sum( )

 

[Output]

 

Null이 없는 칼럼은 0을 반환

결과: Age는 177개의 Null, Cabin은 687개의 Null, Embarked은 2개의 Null이 있음을 알 수 있다. 결손 데이터(Null)를 편리하게 다른 값으로 대체해 보자.

 


fillna( )로 결손 데이터 대체하기

  • DataFrame.fillna( )

'Age' 칼럼의 NaN값을 평균 나이로, 'Embarked' 칼럼의 NaN 값을 'S'로 대체해 'Cabin'을 제외한 모든 결손 데이터를 처리해보자.

titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')
titanic_df.isna().sum()

 

[Output]

 

Age, Embarked 칼럼 Null값이 0개인 모습

 

결과: 타이타닉 데이터의 'Age' 칼럼에 있는 Null 값은 모두 평균값으로 대체, 'Embarked' 칼럼에 있는 Null 값은 모두 'S'로 대체되어 Null이 있는 값이 0개가 되었다.

 

판다스 데이터프레임 결손 데이터 처리하기

 

 

Reference


https://github.com/chulminkw/PerfectGuide

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD%EA%B0%80%EC%9D%B4%EB%93%9C/dashboard

728x90
반응형
Comments