본문 바로가기

데이터 분석 학습

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

반응형

7-2 이상한 데이터를 찾아라! - 이상치 정제하기

이상치(anomaly): 정상 범위에서 크게 벗어난 값

이상치 제거하기-존재할 수 없는 값

df = pd.DataFrame({'sex' : [1,2,1,3,2,1],
                   'score' : [5,4,3,4,2,6]})
df

이상치 확인하기

df['sex'].value_counts().sort_index()

"""
1    3
2    2
3    1
Name: sex, dtype: int64
"""
df['score'].value_counts().sort_index()

"""
2    1
3    1
4    2
5    1
6    1
Name: score, dtype: int64
"""

결측 처리하기

df['sex'] = np.where(df['sex'] == 3, np.nan, df['sex'])
df

df['score'] = np.where(df['score'] > 5, np.nan, df['score'])
df

df.dropna(subset = ['sex', 'score']).groupby('sex').agg(mean_score = ('score', 'mean'))

※ np.where()는 문자와 NaN을 함께 반환 불가

df = pd.DataFrame({'x1' : [1, 1, 2, 2]})
df['x2'] = np.where(df['x1'] == 1, 'a', np.nan)  # 조건에 맞을 때 문자 부여
df

df.isna()

np.where()을 이용해 결측치로 만들 값에 문자 부여

# 결측치로 만들 값에 문자 부여
df['x2'] = np.where(df['x1'] == 1, 'a', 'etc')

df.replace()를 이용해 결측치로 만들 문자를 np.nan으로 바꿈. df.replace()는 입력한 값을 다른 값으로 바꾸는 기능 함

# 'etc'를 NaN으로 바꾸기
df['x2'] = df['x2'].replace('etc', np.nan)  
df

df.isna()

 

 

 

 

 

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

반응형