[Pandas] concat
Pandas concat, pd.concat, pandas append
정의
pd.concat(objs, axis=0) 는 여러 DataFrame/Series 를 세로 (axis=0) 또는 가로 (axis=1) 로 단순 연결. SQL 의 UNION (axis=0) 또는 column-level concatenation (axis=1).
key 매칭이 아닌 위치 기반 결합 이라 Pandas merge / Pandas join 과 구분된다.
세로 연결 (axis=0, 기본)
result = pd.concat([df1, df2])
python
import pandas as pd
df1 = pd.DataFrame({'name':['A','B'], 'age':[10,20]})
df2 = pd.DataFrame({'name':['C','D'], 'age':[30,40]})
print(pd.concat([df1, df2])) 결과
name age
0 A 10
1 B 20
0 C 30
1 D 40index 가 중복됨 (0, 1, 0, 1).
pd.concat([df1, df2], ignore_index=True)
# index 가 0, 1, 2, 3 으로 재생성
가로 연결 (axis=1)
pd.concat([df1, df2], axis=1)
# 컬럼이 옆으로 붙음, index 기준 정렬
컬럼이 다를 때
df1 = pd.DataFrame({'a':[1,2], 'b':[3,4]})
df2 = pd.DataFrame({'a':[5,6], 'c':[7,8]})
pd.concat([df1, df2])
# a: 1,2,5,6
# b: 3,4,NaN,NaN
# c: NaN,NaN,7,8
기본 join='outer', 합집합. join='inner' 면 교집합 컬럼만.
keys (계층적 라벨)
pd.concat([df1, df2], keys=['Q1', 'Q2'])
# 결과의 index 가 MultiIndex (Q1/0, Q1/1, Q2/0, Q2/1)
여러 시기/그룹의 데이터를 한 번에 모아 분석할 때 유용.
자주 쓰는 패턴
여러 파일을 하나로
import glob
dfs = [pd.read_csv(f) for f in glob.glob('data/*.csv')]
big = pd.concat(dfs, ignore_index=True)
새 행 추가
# pandas 1.x 의 df.append 는 deprecated
new_row = pd.DataFrame([{'name': 'E', 'age': 50}])
df = pd.concat([df, new_row], ignore_index=True)
컬럼 추가 (가로 결합)
pd.concat([df, extra_features], axis=1)
성능
concat 은 전체 결과 메모리를 미리 할당 한 뒤 복사. 큰 데이터를 여러 번 concat 하면 O(n²) 비용 가능.
# ❌ 느림
result = pd.DataFrame()
for df in dfs:
result = pd.concat([result, df])
# ✓ 한 번에
result = pd.concat(dfs, ignore_index=True)
merge / join / concat 비교
| 동작 | 함수 |
|---|---|
| key 매칭 | merge |
| index 매칭 (간편) | join |
| 단순 연결 (위/옆) | concat |
함정
1. index 중복
pd.concat([df1, df2])
# 0, 1, 0, 1 → .loc[0] 이 두 행 반환!
# 해법: ignore_index=True 또는 reset_index
2. dtype 강등
# df1 의 a 는 int, df2 의 a 는 float → 결과는 float
# df1 의 a 는 int, df2 에 NaN 행이 추가 → float 으로 강등
3. 컬럼 순서
# 컬럼 합집합이지만 순서는 첫 DataFrame 우선
pd.concat([df1, df2]).columns
# df1 의 컬럼 순서 + df2 의 새 컬럼 (뒤에)
참고
이 글의 용어 (3개)
- [Pandas] DataFramepandas
- 정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
- [Pandas] joinpandas
- 정의 는 index 기반 결합 의 편의 API. 내부적으로는 와 동등하지만 더 짧다. 기본 merge 와의 비교 은 index 끼리 매칭이 기본 가정이라 코드가 짧다. 컬럼 기준…
- [Pandas] mergepandas
- 정의 는 두 DataFrame 을 SQL join 처럼 결합. 4 가지 join 타입 (inner / left / right / outer) 지원. 시각화 4 가지 join 타입…
💬 댓글