데이터를 분석하면 가장 많은 시간을 데이터 전처리에 쏟게 된다
오늘은 결측치를 다루는 방법
예제:
import pandas as pd
from io import StringIO
csv_data = '''A,B,C,D,
1.,2.,3.,4.,
5.,6.,,8.,
0.0,11.0,12.0'''
df = pd.read_csv(StringIO(csv_data), encoding='UTF-8') #StringIO 은 데이터 프레임에 넣어주기 위해 사용
print(df) # 데이터 넣을 떄 ' '공란 주의하고, Unnamed: 4가 생긴 이유는 '/n' 때문에 생김
A B C D Unnamed: 4
0 1.0 2.0 3.0 4.0 NaN
1 5.0 6.0 NaN 8.0 NaN
2 0.0 11.0 12.0 NaN NaN
df = df.drop(['Unnamed: 4'], axis=1)
print(df) # Unnamed: 4' 제거
A B C D
0 1.0 2.0 3.0 4.0
1 5.0 6.0 NaN 8.0
2 0.0 11.0 12.0 NaN
df_na = df.isnull() # isnull() 과 isna() 같음
print(df_na)
A B C D
0 False False False False
1 False False True False
2 False False False True
df_na_sum = df.isnull().sum() # na 값의 갯수를 알려줌
print(df_na_sum)
A 0
B 0
C 1
D 1
dtype: int64
df_dropna = df.dropna() # Na값이 있는 모든 행 삭제
print(df_dropna)
A B C D
0 1.0 2.0 3.0 4.0
df_dropna = df.dropna(axis=1) # Na값이 있는 모든 열 삭제
print(df_dropna)
A B
0 1.0 2.0
1 5.0 6.0
2 0.0 11.0
df_dropna = df.dropna(how='all') # 모든 행의 값이 Na 이면 행(기본값이 axis=0)을 삭제, (how='any') : 모든 행에서 Na값이 하나라도 있으면 행 삭제
print(df_dropna)
A B C D
0 1.0 2.0 3.0 4.0
1 5.0 6.0 NaN 8.0
2 0.0 11.0 12.0 NaN
df_dropna = df.dropna(thresh=4) #
print(df_dropna)
A B C D
0 1.0 2.0 3.0 4.0
df_dropna = df.dropna(subset=['C']) # 컬럼 'C'에 결측치가 있는 경우 삭제
print(df_dropna)
A B C D
0 1.0 2.0 3.0 4.0
2 0.0 11.0 12.0 NaN
from sklearn.preprocessing import Imputer
imr = Imputer(missing_values='NaN', strategy='mean', axis=0) # 열의 평균을 결측값으로 대신 사용함
# Imputer 옵션: axis=0 : 열기준, axis=1 : 행기준 / strategy = 'mean' : 평균, 'median' : 중앙값, most_frequent: 최빈값/범주형 피처 값 조정에 유용함)
df_imr = imr.fit_transform(df.values)
print(df_imr)
[[ 1. 2. 3. 4. ]
[ 5. 6. 7.5 8. ]
[ 0. 11. 12. 6. ]]
df = df.fillna(value=100) # 특정 값으로 결측치를 채움
print(df)
A B C D
0 1.0 2.0 3.0 4.0
1 5.0 6.0 100.0 8.0
2 0.0 11.0 12.0 100.0
df.index = pd.date_range('20180401', periods=3) # 인덱스를 날자로 자동으로 넣어줌
print(df)
A B C D
2018-04-01 1.0 2.0 3.0 4.0
2018-04-02 5.0 6.0 100.0 8.0
2018-04-03 0.0 11.0 12.0 100.0
df = df.drop(pd.to_datetime('20180401')) # 특정 날짜의 데이터 행을 삭제함
print(df)
A B C D
2018-04-02 5.0 6.0 100.0 8.0
2018-04-03 0.0 11.0 12.0 100.0
'데이터분석 > 머신러닝' 카테고리의 다른 글
[데이터 분석-전처리] 범주형 데이터_원핫인코딩 쉽게하기 (0) | 2018.05.17 |
---|---|
[데이터 분석-전처리] 범주형 데이터 (0) | 2018.04.24 |
[이론] 머신러닝 알고리즘 기초 (인공뉴런-퍼셉트론, 에이다라인) (0) | 2018.04.24 |
머신러닝 관련 알아두면 좋은 내용 (0) | 2018.04.19 |
파이썬_머신러닝_딥러닝_ 많이 쓰는 라이브러리 모음_링크 (0) | 2018.04.05 |