본문으로 건너뛰기
김신건의 로그

[Pandas] concat

· 수정 · 📖 약 1분 · 248자/단어 #python #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   40

index 가 중복됨 (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 타입…

이 개념을 다룬 위키 페이지 (4)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기