데이터 분석/Pandas

Pandas 누락값 처리 - Handling Missing Values IN Python

haloaround 2020. 8. 8. 08:31

누락 값 처리하는 4가지 스킬

누락을 발견하고, 누락 규모 파악하고, 누락값을 채우거나 버리는 작업이 필요하다. 

 

Discovering missing values  : isnull(), notnull()

Counting missing values : isnull().sum()

Filling in for missing values : fillna(), interpolate()

Filtering out missing values : dropna()

 

 


How to Identify and Drop Null Values | Handling Missing Values in Python

 

이 영상은 누락 값을 파악하고, 필터링하는 방법을 서술한 영상이다. 

인도분이라 발음이 조금 힘들 수는 있지만 듣다보면 익숙해질 정도이고, 설명 자체는 너무 명확한 강의였다 :D 

https://www.youtube.com/watch?v=57vFbsiZYHg

 

 

1. 데이터에 Null 이 어떻게 있는지 확인하자.

import pandas as pd
orders = pd.read_excel('C:/Users/alicia/Desktop/Sample - Superstore Sales.xls', 0)
orders.isnull().sum() 

orders[orders['Product Base Margin'].isnull()]

 

orders DataFrame 의 각 셀 (한 개의 값, 행/열 intersection) 단위로 null 여부 true/false 값을 확인하고,
sum 하면  true 1 / false 0 기준으로 모든 행에 대해서 값을 더한다. 
sum 결과가 0 이면 누락된 데이터가 없는 것  / 0이 아니면 누락 데이터가 있는 것이다. 

위 데이터에서는 'Product Base Margin' 열에서 Null 이 발견되었다. 특정 열이 Null value 가 있다면 이렇게 확인해보자.

 

 

2. Null Value 가 있는 행을 날려버리자!

orders.shape
orders.dropna(how='any').shape
orders.dropna(how='all').shape
orders.dropna(subset=['Customer Name', 'Province'], how='all').shape
orders.dropna(how='any', thresh=1).shape

 

- how: any 행 내에 어떤 값이라도 / all 행 내 모든 값이 null 일 경우 행을 날리자.
- subset/how: subset 특정 칼럼 기준으로 any 행내 어떤 값이라도 / all 행 네 모든 값에 대해 null 일 경우 행을 날리자.
- thresh/how: 전체 컬럼값 중 1개 이상의 행에 대해 null 일 경우 행을 날리자. 

 

참고. 영상 중에 요렇게 dropna() 메소드를 찍어놓고, 사용가능한 옵션들을 살펴보는 습관을 들이자 :)

 

 


How to Fill Up NA Values | Various ways to fill missing values in python

 

동일한 분의 누락값에 대해 적당한 값으로  채워넣는 영상!

https://www.youtube.com/watch?v=ktQOTU7hxCo

 

 

null_values = pd.Series([1, np.NaN, 2, np.NaN, 3,4, np.NaN, np.NaN, 8])

null_values.fillna(method='ffill')
null_values.fillna(method='ffill', limit=1)
null_values.fillna(0)
null_values.fillna(np.mean(null_values))
null_values.interpolate()

 

Q. interpolate? statistical term!

how the values are distributed based on trend and interval

요렇게 NaN 을 중간 값으로 채울수 있다. :ㅇ