(Machine) 13. Data cleansing
# 학습 목표
데이터에 있는 여러 이슈(ex. 결측치, scale 문제 등)와 이 이슈들을 처리하기 위해 사용하는 방법들을 소개하고, pandas를 이용하여 데이터를 cleansing 하는 방법에 대해 공부해보자!!
# 데이터가 없을 떄 할 수 있는 전략
- 데이터가 없으면 sample을 drop
- 데이터가 없는 최소 개수를 정해서 sample을 drop
- 데이터가 거의 없는 feature는 freature 자체를 drop
- 최빈값, 평균값으로 비어있는 데이터를 채우기
1. Nan값 처리하기
raw_data = {'first_name': ['Jason', np.nan, 'Tina', 'Jake', 'Amy'],
'last_name': ['Miller', np.nan, 'Ali', 'Milner', 'Cooze'],
'age': [42, np.nan, 36, 24, 73],
'sex': ['m', np.nan, 'f', 'm', 'f'],
'preTestScore': [4, np.nan, np.nan, 2, 3],
'postTestScore': [25, np.nan, np.nan, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'sex', 'preTestScore', 'postTestScore'])
print(df)
########################
# 0 Jason Miller 42.0 m 4.0 25.0
# 1 NaN NaN NaN NaN NaN NaN
# 2 Tina Ali 36.0 f NaN NaN
# 3 Jake Milner 24.0 m 2.0 62.0
# 4 Amy Cooze 73.0 f 3.0 70.0
1. isnull로 sum()을 하면 전체 null 개수 리턴 하고
전체 row갯수로 나누어 백분율을 구함
df.isnull().sum() / len(df)
###################
# first_name 0.2
# last_name 0.2
# age 0.2
# sex 0.2
# preTestScore 0.4
# postTestScore 0.4
2-1 nan값 데이터 Row를 날려버리기
df_no_missing = df.dropna()
print(df_no_missing)
##################
# first_name last_name age sex preTestScore postTestScore
# 0 Jason Miller 42.0 m 4.0 25.0
# 3 Jake Milner 24.0 m 2.0 62.0
# 4 Amy Cooze 73.0 f 3.0 70.0
2-2 Row 전체가 nan인 경우에 만 Row 삭제 하기
df_cleaned = df.dropna(how='all')
#################
# first_name last_name age sex preTestScore postTestScore
# 0 Jason Miller 42.0 m 4.0 25.0
# 2 Tina Ali 36.0 f NaN NaN
# 3 Jake Milner 24.0 m 2.0 62.0
# 4 Amy Cooze 73.0 f 3.0 70.0
2. Nan값에 값 치환
1. 0으로 치환
df.fillna(0)
2. Colum의 평균값으로 치환
df["preTestScore"].fillna(df["preTestScore"].mean(), inplace=True)
# first_name last_name age sex preTestScore postTestScore
# 0 Jason Miller 42.0 m 4.0 25.0
# 1 NaN NaN NaN NaN 3.0 NaN
# 2 Tina Ali 36.0 f 3.0 NaN
# 3 Jake Milner 24.0 m 2.0 62.0
# 4 Amy Cooze 73.0 f 3.0 70.0
댓글남기기