본문 바로가기
study📚/python

[python/파이썬] 데이터 전처리 - 결측값 처리 isnull(), dropna(), fillna()

by 스닝 2022. 7. 26.

결측값 처리

 

 

import pandas as pd
import numpy as np

df = pd.DataFrame({'a' : [1, 1, 3, 4, 5], 'b' : [2, 3, np.nan, 3, 4], 'c' : [3, 4, 7, 6, 4]})
df

1.  isnull()

  • isnull() : 결측값 유무 확인
df.isnull()

  • isnull().sum() : 결측값 개수 확인
    • isnull값이 null값이면 True, null값이 아니라면 False를 출력
df.isnull().sum()

a 0
b 1
c 0
dtype: int64

2.  dropna()

  • dropna() : 결측값이 포함된 행 지우기
df.dropna()

df

df.dropna(inplace = True)
df

  • dropna(axis=1) : 결측값이 포함된 열 지우기
df = pd.DataFrame({'a' : [1, 1, 3, 4, 5], 'b' : [2, 3, np.nan, 3, 4], 'c' : [3, 4, 7, 6, 4]})
df.dropna(axis=1)

df

df.dropna(axis=1, inplace = True)
df

3.  fillna()

  • fillna() : 결측값을 다른 값으로 대체, 결측값 채우기
df = pd.DataFrame({'a' : [1, 1, 3, 4, 5], 'b' : [2, 3, np.nan, 3, 4], 'c' : [3, 4, 7, 6, 4]})
df

#결측값을 특정 값으로 채우기

df.fillna(0, inplace=True)
df

  • 앞이나 뒤의 숫자로 바꾸기
df = pd.DataFrame({'a' : [1, 1, 3, 4, np.nan], 'b' : [2, 3, np.nan, np.nan, 4], 'c' : [np.nan, 4, 1, 1, 4]})
df

  • df.fillna(method='bfill') or df.fillna(method='backfill') : 결측값을 결측값의 행의 값으로 채우기
df.fillna(method='bfill')

df

  • df.fillna(method='ffill') or df.fillna(method='pad') : 결측값을 결측값의 행의 값으로 채우기
df.fillna(method='ffill')

  • fillna(method='ffill', limit=number), fillna(method='bfill', limit=number) : 앞/뒤 방향으로 결측값 채우는 횟수 제한하기
df.fillna(method='ffill', limit =1)

-문제 : 데이터 프레임에 존재하는 결측값들을 뒤의 값으로 대체한 이후 앞의 값으로 대체하기

df = pd.DataFrame({'a' : [1, 1, 3, 4, np.nan], 'b' : [2, 3, np.nan, np.nan, 4], 'c' : [np.nan, 4, 1, 1, 4]})
df

df.fillna(method='bfill', inplace=True)
df

df.fillna(method='ffill',inplace=True)
df

  • fillna(df.mean()) : 결측값을 각 열의 평균 값으로 채우기
df = pd.DataFrame({'a' : [1, 1, 3, 4, np.nan], 'b' : [2, 3, np.nan, np.nan, 4], 'c' : [np.nan, 4, 1, 1, 4]})
df

df.mean()['a']

2.25

df.fillna(df.mean()['a'])

df.mean()

a 2.25
b 3.00
c 2.50
dtype: float64

df.fillna(df.mean())

df

-문제 : b, c의 결측값들을 데이터 프레임의 전체 값의 평균으로 치환하기

df.fillna(df.mean()[['b', 'c']])

댓글