Python Pandas로 데이터 전처리 및 정제 마스터하기

  • 카카오톡 공유하기
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 링크 복사하기

데이터를 다루는 과정에서 데이터 전처리는 매우 중요한 단계입니다. 이 글에서는 Pandas를 사용하여 데이터를 효과적으로 정제하고 변환하는 핵심 기법들을 살펴보겠습니다.

1. 결측치 처리 전략

결측치는 데이터 분석에 심각한 영향을 미칠 수 있습니다. Pandas에서는 다양한 방법으로 결측치를 처리할 수 있습니다.

1.1 결측치 확인 및 개수 파악

import pandas as pd
import numpy as np

# 결측치 확인
print(df.isnull().sum())

# 결측치 비율 계산
print(df.isnull().mean() * 100)

1.2 결측치 처리 방법

# 1. 결측치 제거
df_cleaned = df.dropna()

# 2. 평균값으로 대체
df['column'] = df['column'].fillna(df['column'].mean())

# 3. 중앙값으로 대체
df['column'] = df['column'].fillna(df['column'].median())

# 4. 특정 값으로 대체
df['column'] = df['column'].fillna(0)

# 5. 앞/뒤 값으로 대체
df['column'] = df['column'].fillna(method='ffill')  # 앞쪽 값
df['column'] = df['column'].fillna(method='bfill')  # 뒤쪽 값

주의사항

  • 도메인 지식을 고려하여 결측치 처리 방법 선택
  • 결측치 제거 시 데이터 손실 가능성 고려
  • 머신러닝 모델에 따라 결측치 처리 전략 조정

2. 중복 데이터 제거

# 전체 중복 행 제거
df_unique = df.drop_duplicates()

# 특정 열 기준 중복 제거
df_unique = df.drop_duplicates(subset=['name', 'age'])

# 첫 번째 또는 마지막 중복 항목 유지
df_unique = df.drop_duplicates(keep='first')  # 첫 번째 항목 유지
df_unique = df.drop_duplicates(keep='last')   # 마지막 항목 유지

3. 이상치 탐지 및 처리

3.1 통계적 방법을 활용한 이상치 탐지

# IQR 방법을 사용한 이상치 탐지
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 이상치 필터링
outliers = df[(df['column'] < lower_bound) | (df['column'] > upper_bound)]

3.2 이상치 처리 방법

# 1. 이상치 제거
df_clean = df[(df['column'] >= lower_bound) & (df['column'] <= upper_bound)]

# 2. 이상치 대체
def cap_outliers(value):
    if value < lower_bound:
        return lower_bound
    elif value > upper_bound:
        return upper_bound
    return value

df['column'] = df['column'].apply(cap_outliers)

4. 데이터 변환: apply, map 활용

4.1 apply 메서드

# 사용자 정의 함수 적용
def convert_age_group(age):
    if age < 20:
        return '청소년'
    elif age < 40:
        return '청년'
    elif age < 60:
        return '중년'
    else:
        return '노년'

df['age_group'] = df['age'].apply(convert_age_group)

# 람다 함수 사용
df['log_salary'] = df['salary'].apply(lambda x: np.log(x))

4.2 map 메서드

# 값 매핑
gender_map = {'M': '남성', 'F': '여성'}
df['gender_kr'] = df['gender'].map(gender_map)

# 딕셔너리를 사용한 변환
city_population = {'Seoul': 9776000, 'Busan': 3448000}
df['city_population'] = df['city'].map(city_population)

주의사항 및 모범 사례

  1. 데이터 전처리 전 항상 데이터의 복사본 생성
  2. 도메인 지식을 활용한 결측치 및 이상치 처리
  3. 전처리 과정 문서화 및 재현 가능성 확보
  4. 전처리 함수 모듈화 및 재사용성 고려

결론

Pandas의 강력한 데이터 조작 기능을 활용하면 효과적이고 정확한 데이터 전처리가 가능합니다. 각 데이터셋의 특성과 분석 목적에 맞는 적절한 전처리 기법을 선택하는 것이 중요합니다.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다