[Python] Pandas 데이터 전처리

감자·2026년 1월 13일

microsoft_dataschool

목록 보기
4/28
post-thumbnail

01. DataFrame 재구조화 (Reshaping)

데이터의 형태를 분석 목적에 맞게 넓게(Wide) 펴거나 길게(Long) 쌓는 기능

1) Pivot & Melt (형태 변경)

서로 반대되는 개념으로 데이터의 차원을 변경함

  • Pivot (df.pivot): 'Long' 포맷 'Wide' 포맷으로 변경
  • index: 행 인덱스로 사용할 컬럼
  • columns: 컬럼 헤더로 사용할 컬럼
  • values: 데이터 값으로 채울 컬럼
  • Melt (df.melt): 'Wide' 포맷 'Long' 포맷으로 변경 (컬럼을 녹여서 행으로 만듦)
  • id_vars: 기준이 되는(유지할) 컬럼
  • value_vars: 행으로 녹여낼 컬럼들

2) Stack & Unstack (인덱스 레벨 변경)

멀티 인덱스(Multi-Index)를 다룰 때 주로 사용

  • Stack (df.stack): 컬럼 레벨을 인덱스(행) 레벨로 압축 (Wide Long)
  • Unstack (df.unstack): 인덱스(행) 레벨을 컬럼 레벨로 펼침 (Long Wide)
  • Explode (df.explode): 리스트(List) 형태의 데이터를 가진 컬럼을 개별 행으로 분리

02. 데이터 병합 (Combining Data)

여러 개의 DataFrame을 하나로 합치는 방법

1) Merge (df.merge)

SQL의 Join과 유사하게, 특정 키(Key)를 기준으로 병합하는 방식

  • how: 병합 방식 (inner, outer, left, right)
  • on: 병합 기준 컬럼 (두 DF의 컬럼명이 같을 때)
  • left_on / right_on: 병합 기준 컬럼 (두 DF의 컬럼명이 다를 때)

2) Concat (pd.concat)

물리적으로 데이터를 단순하게 이어 붙이는 방식

  • axis: 0이면 위아래(행 추가), 1이면 옆으로(열 추가) 붙임
  • join: outer(합집합), inner(교집합)
  • ignore_index: 기존 인덱스를 무시하고 새로 인덱스 부여 여부 (True/False)

03. 상관 분석 (Correlation Analysis)

두 변수 간의 관계의 강도와 방향을 수치화하는 통계 기법

1) 핵심 개념

  • 특징: 인과 관계(원인과 결과)가 아닌 단순 관련성을 나타냄. 이상치(Outlier)에 민감함
  • vs 선형 회귀:
  • 상관 분석: 관계의 강도 측정 (상관 계수 )
  • 선형 회귀: 한 변수로 다른 변수를 예측하기 위한 모델 생성 ()

2) 상관 계수의 종류 (Method)

  1. Pearson (피어슨): 가장 흔함. 두 변수 간의 선형적 관계 측정 (연속형 변수)
  2. Spearman (스피어만): 변수의 순위(Rank) 관계 기반 (비선형적 관계 포착 가능)
  3. Kendall (켄달): 순위 기반. 샘플 사이즈가 작거나 이상치가 많을 때 유용

3) Python 구현 (Pandas & Seaborn)

import seaborn as sns
import matplotlib.pyplot as plt

# 데이터 로드
df = sns.load_dataset("penguins")

# 1. 상관 계수 계산
# method='pearson' (기본값)
# numeric_only=True: 숫자형 데이터만 계산
corr_matrix = df.corr(method='pearson', numeric_only=True)

# 2. 히트맵 시각화
sns.heatmap(corr_matrix, 
            annot=True,      # 값 표시
            fmt=".2f",       # 소수점 둘째자리까지
            cmap='coolwarm', # 색상 테마
            vmin=-1, vmax=1) # 범위 설정
plt.show()

# 3. 선형 관계 시각화
sns.lmplot(x="bill_length_mm", y="bill_depth_mm", data=df)

💡 Tip: numeric_only 옵션

  • 보통 True로 설정하여 수치형 데이터만 계산함
  • Boolean 데이터(True/False)는 자동으로 1/0으로 계산되므로 포함 가능
  • 일반적인 범주형 데이터는 수치형으로 변환(Encoding) 후 분석하는 것이 정석임

도움이 되셨다면 ❤️와 댓글 부탁드립니다!

profile
제 별명이 감자입니다

0개의 댓글