[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

Pandas 데이터프레임 결측치(null값) 제어

inu 2020. 7. 14. 19:27

결측치 생성

import pandas as pd import numpy as np df = pd.read_csv('data/data_iris.csv', header='infer',encoding = 'latin1') # csv 파일에서 df정보 불러오기 df.count(axis=0)
==결과== Sepal.Length 150 Sepal.Width 150 Petal.Length 150 Petal.Width 150 Species 150 dtype: int64
# 결측치 생성 df.iloc[10,0] = np.nan df.iloc[32,2] = np.nan df.iloc[17,2] = np.nan df.iloc[129,2] = np.nan
df.count(axis=0)
==결과== Sepal.Length 149 Sepal.Width 150 Petal.Length 147 Petal.Width 150 dtype: int64
  • np.nan은 결측치를 생성한다.
  • 해당 값이 들어간 위치는 결측치가 되어 count에서 제외된다.

skipna

df.mean(skipna=False)
==결과== Sepal.Length NaN Sepal.Width 3.057333 Petal.Length NaN Petal.Width 1.199333 dtype: float64
  • 결측치가 있는 상태에서 mean과 같은 통계연산을 수행하면, 보통 해당 값은 제외하고 연산을 수행한다.
  • 하지만 skipna 옵션을 False로 두면 해당 값을 포함하고 결과는 NaN으로 처리한다.

isnull

print(df.isnull())
==결과== ​​​​​Sepal.Length Sepal.Width Petal.Length Petal.Width Species 0 False False False False False 1 False False False False False 2 False False False False False 3 False False False False False 4 False False False False False .. ... ... ... ... ... 145 False False False False False 146 False False False False False 147 False False False False False 148 False False False False False 149 False False False False False [150 rows x 5 columns]
  • isnull은 해당 데이터 프레임내 요소들의 결측치 여부를 체크하는 함수이다.
  • 기본적으로는 위와같이 데이터프레임 형태로 처리된다.
df.isnull().sum(axis=0)
==결과== Sepal.Length 1 Sepal.Width 0 Petal.Length 3 Petal.Width 0 Species 0 dtype: int64
  • 하지만 해당 결과에 sum이나 mean같은 통계값 함수를 적용하면 결측치의 개수, 비율 등을 파악할 수 있어 용이하다.

dropnna

df.dropna(axis=0, thresh = 4, inplace = True)
  • dropna는 행(열) 중 에서 결측치가 존재하는 행(열)을 제거한다.
  • axis = 0이면 행을 제거하고 axis = 1이면 열을 제거한다.
  • thresh = N 옵션을 주면 해당 행(열)에 N개 이상의 값이 존재하면 결측치가 존재해도 행(열)을 제거하지 않는다.
  • inplace = True 옵션을 주면 항구적 적용이 가능하다.

fillna

df.fillna(value=0)
  • 특정값으로 결측치 부분을 채워준다.
  • 보통 0이나 평균값, 최빈값 등이 활용된다.
  • 하지만 추후 배울 머신러닝을 활용해 '예측값'을 넣어주는 것이 가장 좋다.