Skip to main content

Concat과 Append

pd.concat()은 여러 DataFrame을 행(위아래) 또는 열(좌우) 방향으로 연결합니다. 월별 데이터를 하나로 합치거나, 여러 소스의 피처를 옆으로 붙일 때 사용합니다.

학습 목표

  • pd.concat으로 행/열 방향 연결을 수행할 수 있다
  • 인덱스 정렬과 충돌 해결 방법을 이해한다
  • concat과 merge의 차이를 설명할 수 있다

왜 중요한가

대규모 데이터 분석에서는 월별, 지역별로 분할된 파일을 하나로 통합하는 작업이 빈번합니다. chunksize로 분할 처리한 결과를 합치거나, 교차 검증의 각 폴드 결과를 통합할 때도 concat이 필요합니다.

행 방향 연결 (axis=0)

import pandas as pd
import numpy as np

# 월별 데이터
jan = pd.DataFrame({'날짜': ['01-01', '01-15'], '매출': [100, 120]})
feb = pd.DataFrame({'날짜': ['02-01', '02-15'], '매출': [110, 130]})
mar = pd.DataFrame({'날짜': ['03-01', '03-15'], '매출': [105, 125]})

# 행 방향 연결 (기본값)
quarterly = pd.concat([jan, feb, mar], ignore_index=True)
print(quarterly)

# keys로 출처 표시
quarterly = pd.concat([jan, feb, mar], keys=['1월', '2월', '3월'])
print(quarterly)

열 방향 연결 (axis=1)

# 같은 인덱스를 가진 데이터
info = pd.DataFrame({'이름': ['김', '이', '박']})
scores = pd.DataFrame({'수학': [85, 92, 78], '영어': [90, 88, 95]})

# 열 방향 연결
combined = pd.concat([info, scores], axis=1)
print(combined)

인덱스 정렬

df1 = pd.DataFrame({'A': [1, 2]}, index=[0, 1])
df2 = pd.DataFrame({'A': [3, 4]}, index=[2, 3])

# ignore_index=True: 새 정수 인덱스 부여
result = pd.concat([df1, df2], ignore_index=True)
print(result.index)  # RangeIndex(start=0, stop=4, step=1)

# 열이 다른 경우
df3 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df4 = pd.DataFrame({'A': [5, 6], 'C': [7, 8]})

result = pd.concat([df3, df4], ignore_index=True)
# 없는 열은 NaN으로 채워짐
DataFrame.append()는 Pandas 2.0에서 제거되었습니다. 항상 pd.concat()을 사용하세요.

실무 패턴: 여러 파일 합치기

import glob

# 여러 CSV 파일 한 번에 읽기
csv_files = glob.glob('data/monthly_*.csv')
dfs = [pd.read_csv(f) for f in sorted(csv_files)]
combined = pd.concat(dfs, ignore_index=True)
print(f"전체 행 수: {len(combined)}")

AI/ML에서의 활용

  • 데이터 통합: 여러 소스의 학습 데이터를 하나로 합칩니다
  • 교차 검증: 각 폴드의 예측 결과를 concat으로 통합합니다
  • 피처 결합: 서로 다른 전처리 결과를 열 방향으로 연결합니다
  • 청크 처리: chunksize로 분할 처리한 결과를 최종 합칩니다
concat()은 단순히 데이터를 이어 붙이는 연산이고, merge()는 키를 기준으로 매칭하여 결합합니다. 같은 구조의 데이터를 쌓을 때는 concat, 키 기반으로 결합할 때는 merge를 사용합니다.
네, Pandas가 자동으로 열 이름을 매칭합니다. 한쪽에만 있는 열은 NaN으로 채워집니다. 열 순서가 다르면 결과의 열 순서가 예측하기 어려울 수 있으므로 필요 시 .reindex(columns=...)로 정렬하세요.

체크리스트

  • pd.concat으로 행/열 방향 연결을 수행할 수 있다
  • ignore_index의 용도를 이해한다
  • keys 파라미터로 출처를 표시할 수 있다
  • 열이 다른 DataFrame을 concat할 때의 동작을 이해한다
  • 여러 파일을 glob + concat으로 합칠 수 있다

다음 문서