데이터 분석을 위한 Pandas: 7. 결측값 처리

결측값(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 댓글