본문 바로가기

EDA/numpy

결측치 처리하는 방법

데이터 

dealnullvalue.csv
0.00MB


실습 데이터는 그림과 같습니다.
실습을 위해 큰 데이터가 아닌 6개 데이터만 있는 작은 데이터 셋 입니다.

데이터를 다운 받은 후 가져오기 위한 코드

import pandas as pd

df = pd.read_csv("path")
df

 


문제 먼저 풀어보기!


실제 실습을 들어가기전 데이터를 보고 아래 질문을 코드로 풀어 봅시다!.

[결측치 탐색]
- 각 열의 결측치를 가지고 있는 데이터의 수는?

- 결측치가 존재하는 행만 뽑아 내는 코드.

- 결측치가 존재하는 feature는 무엇이 있는가?

[결측치 처리]

- age 와 measurement 열의 결측치가 있는 행을 제거해 주세요.

- age 와 measurement 열의 결측치를 0으로 바꿔주세요.

- age 와 measurement 열의 결측치를 평균값으로 바꿔주세요.

- age 와 measurement 열의 결측치를 KNN보간 값으로 값을 바꿔주세요.

- gender 와 education 열의 결측치가 있는 행을 제거해 주세요.

- gender 와 education 열의 결측치를 'Unknown'으로 바꿔주세요.

- gender 와 education 열의 결측치를 최빈값으로 바꿔주세요.


결측치 탐색


- 각 열의 결측치를 가지고 있는 데이터의 수는?

df.isnull().sum()


- 결측치가 존재하는 행만 뽑아 내는 코드

df[df.isnull().any(axis=1)]

df.loc[df.isnull().any(axis=1), :]



- 결측치가 존재하는 feature는 무엇이 있는가?

df.isnull().any(axis=0)

keys = df.keys()
for idx, item in enumerate(df.isnull().any(axis=0)):
    if item:
        print(keys[idx])

 

 


결측치 다루기

 

- age 와 measurement 열의 결측치가 있는 행을 제거해 주세요.

df.loc[:, ['age', 'measurement']].dropna()


- age 와 measurement 열의 결측치를 0으로 바꿔주세요.

# 방법 1
df.loc[:, ['age', 'measurement']].fillna(0)

# 방법 2 
from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=0)
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measurement']] = data

 


- age 와 measurement 열의 결측치를 평균값으로 바꿔주세요.

from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='mean')
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measurement']] = data


- age 와 measurement 열의 결측치를 KNN보간 값으로 값을 바꿔주세요.

from sklearn.impute import KNNImputer

imp = KNNImputer(n_neighbors=2, weights='uniform')
data = imp.fit_transform(df.loc[:, ['age', 'measurement']])
df.loc[:, ['age', 'measuerment']] = data



- gender 와 education 열의 결측치가 있는 행을 제거해 주세요.

df.loc[:, ['gender', 'education']].dropna()


- gender 와 education 열의 결측치를 'Unknown'으로 바꿔주세요.

df.loc[:, ['gender', 'education']].fillna('Unknown')

from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value='Unknown')
data = imp.fit_transform(df.loc[:, ['gender', 'education']])
df.loc[:, ['gender', 'education']] = data



- gender 와 education 열의 결측치를 최빈값으로 바꿔주세요.

df.loc[:, ['gender', 'education']].fillna(df.loc[:, ['gender', 'education']].mode().iloc[0])

from sklearn.impute import SimpleImputer

imp = SimpleImputer(missing_values = np.nan, strategy='most_frequent')
data = imp.fit_transform(df.loc[:, ['gender', 'education']].values)
df.loc[:, ['gender', 'education']] = data