본문 바로가기
데이터인문학/데이터스토리

파이썬에서 결측치 처리하기

by 데이터스토리 2022. 3. 4.
반응형

결측치 처리

파이썬에서 데이터 처리를 위해 사용하는 라이브러리에는 판단스가 있다.
판다스는 엑셀 처리와 유사한 기능을 가지고 있다.
판다스를 이용해서 결측치 처리를 해보자.

결측치란 데이터가 없다는 뜻이다.
파이썬에서는 pd.NA, np.nan 으로 적용된다.

1. 라이브러리 Import

import numpy as np
import pandas as pd

2. 테스트용 데이터 생성

dates = ['2022-03-01','2022-03-02','2022-03-03','2022-03-04','2022-03-05','2022-03-06']
columns = ['A', 'B', 'C']
df = pd.DataFrame(np.random.randn(6,3), index=dates, columns=columns)
df

A B C
2022-03-01 -0.527667 -1.134118 0.194561
2022-03-02 -0.328909 -0.473113 0.424135
2022-03-03 -0.310271 -0.424137 -0.485320
2022-03-04 0.329500 -1.263404 0.752860
2022-03-05 -0.258414 1.024787 0.875814
2022-03-06 -0.671253 1.070769 -0.682859
# 결측치 데이터 생성
df.loc[dates[0]:dates[1], 'E'] = [1,2]               # 2개만 반영, 나머지 NaN 처리 
df.loc[dates[0]:dates[3], 'F'] = np.random.randn(4)  # 4개만 반영, 나머지 NaN 처리 

# 결측치 확인-  E,F 추가 되었음 
df           

A B C E F
2022-03-01 -0.527667 -1.134118 0.194561 1.0 0.655535
2022-03-02 -0.328909 -0.473113 0.424135 2.0 -0.986560
2022-03-03 -0.310271 -0.424137 -0.485320 NaN -1.142989
2022-03-04 0.329500 -1.263404 0.752860 NaN -0.415189
2022-03-05 -0.258414 1.024787 0.875814 NaN NaN
2022-03-06 -0.671253 1.070769 -0.682859 NaN NaN

3. 결측 데이터 처리

1) 결측치를가지고 있는 행을 지운다

df.dropna()        #  df.dropna(how='any') 는 dfaullt how='any'

A B C E F
2022-03-01 -0.527667 -1.134118 0.194561 1.0 0.655535
2022-03-02 -0.328909 -0.473113 0.424135 2.0 -0.986560

2) 결측치 채워넣기 - 정해진 값을 채우기

  • df.fillna(value= 값) : 정해진 값을 value=에 넣기
df.fillna(value=5)   # __ 5로 채우기(E,F 필드 NaN이 5로 채워짐)

A B C E F
2022-03-01 -0.527667 -1.134118 0.194561 1.0 0.655535
2022-03-02 -0.328909 -0.473113 0.424135 2.0 -0.986560
2022-03-03 -0.310271 -0.424137 -0.485320 5.0 -1.142989
2022-03-04 0.329500 -1.263404 0.752860 5.0 -0.415189
2022-03-05 -0.258414 1.024787 0.875814 5.0 5.000000
2022-03-06 -0.671253 1.070769 -0.682859 5.0 5.000000

3)결측치를 채워넣기 - 평균값으로 채우기

df.fillna(value=df.mean())     # 평균값으로 채우기

# max로 채우려면 df.fillna(value=df.max())

A B C E F
2022-03-01 -0.527667 -1.134118 0.194561 1.0 0.655535
2022-03-02 -0.328909 -0.473113 0.424135 2.0 -0.986560
2022-03-03 -0.310271 -0.424137 -0.485320 1.5 -1.142989
2022-03-04 0.329500 -1.263404 0.752860 1.5 -0.415189
2022-03-05 -0.258414 1.024787 0.875814 1.5 -0.472301
2022-03-06 -0.671253 1.070769 -0.682859 1.5 -0.472301

4. 결측데이터 확인하기

nan값을 Boolean 으로 보기 - nan이면 True로 아니면 False

pd.isna(df)    # df.isna() 이렇게 적어도 됨

A B C E F
2022-03-01 False False False False False
2022-03-02 False False False False False
2022-03-03 False False False True False
2022-03-04 False False False True False
2022-03-05 False False False True True
2022-03-06 False False False True True

(끝)

반응형