결측값(missing values) 처리는 데이터 분석에서 매우 중요한 단계입니다. Pandas에서는 결측값을 효과적으로 처리할 수 있는 다양한 방법을 제공합니다.
결측값 확인
먼저 데이터셋에서 결측값을 확인하는 방법을 알아보겠습니다:
# python
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [9, 10, 11, 12]})
# 결측값 확인
print(df.isnull())
# 결측값 개수 확인
print(df.isnull().sum())
# 결측값이 있는 행 확인
print(df[df.isnull().any(axis=1)])
#
결측값 제거
결측값이 포함된 행이나 열을 제거할 수 있습니다:
# python
# 결측값이 있는 행 제거
df_cleaned = df.dropna()
# 결측값이 있는 열 제거
df_cleaned_cols = df.dropna(axis=1)
# 모든 값이 결측값인 행만 제거
df_cleaned_all = df.dropna(how='all')
#
결측값 채우기
결측값을 특정 값이나 통계량으로 채울 수 있습니다:
# python
# 특정 값으로 채우기
df_filled = df.fillna(0)
# 이전 값으로 채우기 (forward fill)
df_ffill = df.fillna(method='ffill')
# 이후 값으로 채우기 (backward fill)
df_bfill = df.fillna(method='bfill')
# 열별로 다른 값 채우기
df_filled_dict = df.fillna({'A': 0, 'B': 5})
# 평균값으로 채우기
df_filled_mean = df.fillna(df.mean())
#
보간법 사용
결측값을 보간하여 채울 수 있습니다:
# python
# 선형 보간법
df_interp = df.interpolate()
# 시계열 데이터에 대한 시간 기반 보간법
df_time = pd.DataFrame({'date': pd.date_range('2023-01-01', periods=5),
'value': [1, np.nan, np.nan, 4, 5]})
df_time_interp = df_time.set_index('date').interpolate(method='time')
#
결측값 대체
특정 조건에 따라 결측값을 대체할 수 있습니다:
# python
# 조건부 대체
df['A'] = df['A'].where(df['A'] > 0, df['C'])
# 다른 열의 값으로 대체
df['B'] = df['B'].fillna(df['C'])
#
고급 결측값 처리
더 복잡한 결측값 처리 방법도 있습니다:
# 결측값 패턴 분석
print(df.isnull().sum() / len(df) * 100)
# 결측값이 있는 행에 대한 통계 계산
print(df.groupby(df.isnull().any(axis=1)).mean())
# 다중 대입법 (Multiple Imputation)
from sklearn.impute import IterativeImputer
imputer = IterativeImputer(random_state=0)
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
#
결측값 처리는 데이터의 특성과 분석 목적에 따라 적절한 방법을 선택해야 합니다. 단순히 결측값을 제거하거나 채우는 것보다는 데이터의 패턴을 고려하여 처리하는 것이 중요합니다. 결측값 처리 방법에 따라 분석 결과가 크게 달라질 수 있으므로 신중하게 접근해야 합니다.
#파이썬 #Python #데이터분석 #dataanalysis #결측값 #결측값처리 #pandas #missing-data #data-cleaning #imputation #보간법 #대입법
0 댓글