본문 바로가기

데이터 분석 학습

7장 데이터 정제 - 빠진 데이터, 이상한 데이터 제거하기 (1)

반응형

7-1 빠진 데이터를 찾아라! - 결측치 정제하기

결측치(missing value) ckwrl

결측치 만들기: NumPy 패키지의 np.nan 입력

import pandas as pd
import numpy as np

df = pd.DataFrame({'sex' : ['M', 'F', np.nan, 'M', 'F'],
                   'score' : [5,4,3,4, np.nan]})
df

df['score'] + 1

"""
0    6.0
1    5.0
2    4.0
3    5.0
4    NaN
Name: score, dtype: float64
"""

결측치 확인하기: pd.isna()에 df를 입력하면 결측치는 True, 결측치가 아닌 값은 False

pd.isna(df)

결측치 제거하기

df.dropna()를 이용하면 결측치가 있는 행 제거 가능 subset에 []를 이용해 변수명 입력

결측치 있는 행 제거

df.dropna(subset = ['score'])

df_nomiss = df.dropna(subset = ['score'])
df_nomiss['score'] + 1

"""
0    6.0
1    5.0
2    4.0
3    5.0
Name: score, dtype: float64
"""

여러 변수에 결측치 없는 데이터 추출

df_nomiss = df.dropna(subset = ['score', 'sex'])
df_nomiss

결측치가 하나라도 있으면 제거

df_nomiss2 = df.dropna()
df_nomiss2

결측치 제거하지 않고 분석하기: 편리하지만 결측치가 있는지 모른 채로 데이터를 다루게 된다는 위험 있음

df['score'].mean()

##출력: 4.0

df['score'].sum()

##출력: 16.0
df.groupby('sex').agg(mean_score = ('score', 'mean'),
                      sum_score = ('score', 'sum'))

결측치 대체하기

결측치 대체법(imputation)

평균값으로 결측치 대체하기

exam = pd.read_csv('exam.csv')
exam.loc[[2, 7, 14], ['math']] = np.nan
exam

exam['math'].mean()

##출력: 55.23529411764706
exam['math'] = exam['math'].fillna(55)
exam

exam['math'].isna().sum()

##출력: 0

 

혼자서 해보기 - 결측치가 들어 있는 mpg 데이터를 이용해 분석 문제를 해결해 보세요.

mpg = pd.read_csv('mpg.csv')

mpg.loc[[64, 123, 130, 152, 211], "hwy"] = np.nan

Q1 drv(구동 방식)별로 hwy(고속도로 연비) 평균이 어떻게 다른지 알아보려고 합니다. 분석을 하기 전에 우선 두 변수에 결측치가 있는지 확인해야 합니다. drv 변수와 hwy 변수에 결측치가 몇 개 있는지 알아보세요.

mpg[['drv', 'hwy']].isna().sum()

"""
drv    0
hwy    5
dtype: int64
"""

Q2 df.dropna()를 이용해 hwy 변수의 결측치를 제거하고, 어떤 구동 방식의 hwy 평균이 높은지 알아보세요. 하나의 pandas 구문으로 만들어야 합니다.

mpg.dropna(subset = ['hwy']).groupby('drv').agg(mean_hwy = ('hwy', 'mean'))

 

 

 

 

 

※ 해당 내용은 <Do it! 파이썬 데이터 분석>의 내용을 토대로 학습하며 정리한 내용입니다.

반응형