🗓️ 2025-01-20(월) 파이썬 기초6
데이터 정제 1. 결측치 정제하기
결측치 : 누락된 값, 비어있는 값. NaN 있는 상태로 연산시 출력 결과도 NaN
* pd.mean(), pd.sum(), groupby(), agg()는 결측치 무시하고 연산함
# 결측치 만들기 (numpy)
np.nan
# 결측치 빈도 확인
pd.isna(df).sum()
# 결측치 있는 행 제거
df = df.dropna(subset = ['score']) # score 결측치 제거
df = df.dropna( ) # 모든 칼럼의 결측치 제거
# 결측치 대체하기
# 1. 평균값
df['math'].mean() # 55.23
df['math'] = df['math'].fillna(55)
데이터 정제 2. 이상치 정제하기
존재할 수 없는 값이 있다면, NaN으로 변환 후 dropna
# 성별 1남, 2여, 3?
df['sex'] = np.where(df['sex'] == 3, np.nan, df['sex'])
df.dropna(subset = ['sex', 'score'])
.groupby('sex')
.agg(mean_score = ('score', 'mean'))
np.where()은 NaN + 숫자 가능, NaN + 문자 불가능
# 1이 아닐 때 NaN이 아니라 'nan' 반환하게 되므로 주의할 것
df['x'] = np.where(df['x1'] == 1, 'a', np.nan)
# np.nan이 아니라, 다른 문자로 대체후 -> 그 문자를 np.nan으로 변경
df['x'] = np.where(df['x1'] == 1, 'a', 'etc')
df['x'] = df['x'].replace('etc', np.nan)
극단치 확인 후 제거
극단치 : 하한 (Q1 - 1.5*IQR), 상한 (Q3 + 1.5*IQR), IQR = Q3-Q1
pct25 = df['hwy'].quantile(.25) # Q1 = 18
pct75 = df['hwy'].quantile(.75) # Q3 = 27
iqr = pct75 - pct25 # IQR = 27 - 18 = 9
pct25 - 1.5 * iqr # 하한 4.5
pct75 + 1.5 * iqr # 상한 40.5
# 하한 미만이거나 상한 초과이면 NaN
df['hwy'] = np.where( (df['hwy'] < 4.5) | (df['hwy'] > 40.5), np.nan, df['hwy'] )
df['hwy'].isna().sum() # 3 = 이상치 개수
'공부해볼갱 > 데이터 배워볼갱' 카테고리의 다른 글
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY22~27 (1) | 2025.02.04 |
|---|---|
| [데이터 배워볼갱] 배달의민족 리뷰 웹스크래핑, 리뷰어 분석하기 (1) | 2025.01.21 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY19 (0) | 2025.01.20 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY18 (2) | 2025.01.16 |
| [데이터 배워볼갱] 코멘토 청년취업사관학교 전Z전능 데이터 분석가 DAY17 (1) | 2025.01.15 |