Pandas - 7. 데이터 병합 및 결합
2025. 2. 8. 12:27ㆍ프로그래밍 (확장)/Python-Pandas
Pandas에서는 여러 개의 데이터프레임을 하나로 병합하거나 결합할 때 다양한 방법을 제공합니다. 이 문서에서는 concat()을 활용한 데이터 연결, merge()를 활용한 병합, 그리고 성능 최적화를 위한 기법들을 설명합니다.
1. 데이터 연결 (concat)
1.1 수직 결합
import pandas as pd
# 샘플 데이터 생성
df1 = pd.DataFrame({'이름': ['철수', '영희'], '성적': [85, 90]})
df2 = pd.DataFrame({'이름': ['민수', '지연'], '성적': [88, 76]})
# 수직 결합
df_concat = pd.concat([df1, df2], ignore_index=True)
print(df_concat)
1.2 수평 결합 시 인덱스 불일치 문제 해결
✅ 해결 방법: reset_index(drop=True) 적용
# 샘플 데이터 생성
df3 = pd.DataFrame({'이름': ['철수', '영희'], '국어': [85, 90]})
df4 = pd.DataFrame({'수학': [88, 95]}, index=[1, 2]) # 인덱스 불일치
# 해결 방안: reset_index(drop=True) 적용
df3_reset = df3.reset_index(drop=True)
df4_reset = df4.reset_index(drop=True)
df_horizontal_fixed = pd.concat([df3_reset, df4_reset], axis=1)
print(df_horizontal_fixed)
2. 데이터 병합 (merge)
2.1 관계 검증
✅ 병합 관계 유형 검증 (validate 옵션 활용)
data7 = pd.DataFrame({'이름': ['철수', '영희', '민수'], '국어': [85, 90, 88]})
data8 = pd.DataFrame({'이름': ['영희', '민수', '지연'], '수학': [95, 76, 89]})
# 1:1 관계 검증 (MergeError 방지)
df_validated = pd.merge(data7, data8, on='이름', how='inner', validate='one_to_one')
print(df_validated)
2.2 데이터 타입 불일치 문제 해결
✅ 부동소수점 오차 방지 (round() 활용)
df = pd.DataFrame({'rate': [1.234567, 2.345678, 3.456789]})
df['rate'] = df['rate'].round(3) # 소수점 3자리까지 반올림
print(df)
3. 성능 최적화 기법
3.1 대용량 데이터 병합 최적화
✅ 정렬된 데이터를 병합할 때 sort=False 적용 ✅ 데이터 타입 변환 (convert_dtypes() 활용)
large_df1 = pd.DataFrame({'ID': range(100000), '값': range(100000)})
large_df2 = pd.DataFrame({'ID': range(50000, 150000), '값': range(50000, 150000)})
# 병합 시 정렬을 비활성화하여 성능 개선
optimized_merge = pd.merge(large_df1, large_df2, on='ID', how='inner', sort=False).convert_dtypes()
print(optimized_merge.info())
4. 오류 방지 체크리스트
✅ 병합 전 데이터 타입 일치 여부 확인 (df.info()) 적용
df.info() # 데이터 타입 확인
✅ 중복 인덱스 검증 (verify_integrity=True)
df_merged = pd.merge(data7, data8, on='이름', how='inner', validate='one_to_one')
print(df_merged)
✅ 중복 컬럼명 방지 (suffixes=('_left', '_right'))
df_merged = pd.merge(data7, data8, on='이름', how='inner', suffixes=('_left', '_right'))
print(df_merged)
✅ 대용량 데이터셋(1GB 이상)은 Dask 병렬 처리 고려
# Dask를 활용한 병렬 처리
import dask.dataframe as dd
df_large = dd.read_csv('large_dataset.csv')
print(df_large.head())
이 문서는 Pandas에서 데이터 병합과 최적화된 성능을 유지하기 위한 주요 기법들을 다루었습니다. 위 내용을 활용하면 데이터 병합 시 발생할 수 있는 문제를 예방하고 보다 효율적인 데이터 처리가 가능합니다.
'프로그래밍 (확장) > Python-Pandas' 카테고리의 다른 글
Pandas - 6. 데이터 연산 (0) | 2025.02.08 |
---|---|
Pandas - 5. 데이터 전처리 (0) | 2025.02.04 |
Pandas - 4. 데이터 선택 및 필터링 (0) | 2025.02.04 |
Pandas - 3. 데이터 입출력 (I/O) (0) | 2025.01.24 |
Pandas - 2. 데이터 구조 (0) | 2025.01.24 |