[회고] 신입 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이나 평균값, 최빈값 등이 활용된다.
  • 하지만 추후 배울 머신러닝을 활용해 '예측값'을 넣어주는 것이 가장 좋다.
반응형