🗃️ 프로그램
home
EveryData엑셀
home

concat

concat이란?

concat은 "concatenate(연결하다)"의 줄임말로, 여러 개의 DataFrame이나 Series를 하나로 결합하는 Pandas의 메서드입니다. 이 메서드는 원본 데이터를 변경하지 않고 새로운 결합된 데이터프레임을 반환하는 특징을 가지고 있습니다.
DataFrame에서 concat은 여러 데이터프레임을 행(axis=0) 또는 열(axis=1) 방향으로 결합할 수 있으며, Series도 마찬가지로 결합이 가능합니다.
이는 데이터 분석 시 여러 데이터셋을 통합하거나 확장할 때 유용하게 사용되며, 특히 기존 데이터의 불변성을 유지하면서 데이터를 결합해야 하는 상황에서 자주 활용됩니다. 원본 데이터프레임을 수정하지 않고 새로운 결과물을 얻을 수 있다는 점이 큰 장점입니다.

concat사용법

기본문법

pd.concat([df1, df2, ...], axis=0, join='outer', ignore_index=False)
Python
복사

1. 기본적인 행 방향 결합

기본적인 행 방향 결합concat 함수를 사용하여 여러 데이터프레임을 위아래로 연결하는 방법입니다. 위 예시 코드에서는 두 개의 데이터프레임 df1과 df2를 생성하고 있습니다. df1은 'A'열과 'B'열로 구성되어 있으며, 각각 'A0', 'A1'과 'B0', 'B1' 값을 포함합니다. df2도 동일한 열 구조를 가지고 있으며, 'A2', 'A3'와 'B2', 'B3' 값을 포함합니다.
이 두 데이터프레임pd.concat([df1, df2])로 결합하면, 데이터가 수직으로 쌓이면서 4행 2열의 새로운 데이터프레임이 생성됩니다. 이때 기본적으로 각 데이터프레임의 원래 인덱스가 유지되므로, 결과 데이터프레임에서는 0과 1이 두 번씩 나타나게 됩니다.
import pandas as pd df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']}) df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']}) result = pd.concat([df1, df2])
Python
복사
A B 0 A0 B0 1 A1 B1 0 A2 B2 1 A3 B3
Python
복사

2. 열 방향 결합 (axis=1)

열 방향 결합데이터프레임을 좌우로 연결하는 방식입니다. axis=1 매개변수를 사용하여 수행되며, 이는 데이터프레임의 열을 기준으로 결합한다는 것을 의미합니다.
아래 예시에서는 df1df2가 서로 다른 열 이름('A', 'B'와 'C', 'D')을 가지고 있으며, concat 함수를 사용하여 이들을 옆으로 연결합니다. 결과적으로 4개의 열을 가진 하나의 데이터프레임이 생성됩니다.
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']}) df2 = pd.DataFrame({'C': ['C0', 'C1'], 'D': ['D0', 'D1']}) result = pd.concat([df1, df2], axis=1)
Python
복사
A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1
Python
복사

3. 인덱스 재설정 (ignore_index=True)

인덱스 재설정concat 함수ignore_index 매개변수를 True로 설정하여 수행할 수 있습니다. 이는 원본 데이터프레임들의 인덱스를 무시하고 새로운 연속적인 인덱스를 생성합니다.
이 방법은 특히 여러 데이터프레임을 결합할 때 인덱스가 중복되는 것을 방지하고, 깔끔하게 정리된 새로운 인덱스를 얻고 싶을 때 유용합니다. 아래 예시에서는 두 데이터프레임을 결합하면서 새로운 연속적인 인덱스(0부터 시작)를 생성합니다.
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']}) df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']}) result = pd.concat([df1, df2], ignore_index=True)
Python
복사
A B 0 A0 B0 1 A1 B1 2 A2 B2 3 A3 B3
Python
복사

4. 내부 조인 (join='inner')

내부 조인(join='inner')은 두 데이터프레임에서 공통으로 존재하는 열만 유지하면서 데이터를 결합하는 방식입니다. join='inner' 매개변수를 사용하면, 한쪽 데이터프레임에만 존재하는 열은 결과에서 제외됩니다.
아래 예시에서는 df1에는 'A'와 'B' 열이, df2에는 'B'와 'C' 열이 있습니다. 내부 조인을 수행하면 두 데이터프레임에 공통으로 존재하는 'B' 열만 남게 됩니다. 이는 데이터의 일관성을 유지해야 하는 경우나 공통 항목만을 분석하고자 할 때 유용합니다.
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']}) df2 = pd.DataFrame({'B': ['B2', 'B3'], 'C': ['C2', 'C3']}) result = pd.concat([df1, df2], join='inner')
Python
복사
B 0 B0 1 B1 0 B2 1 B3
Python
복사

5. 키를 사용한 결합 (keys 파라미터)

keys 파라미터를 사용한 결합은 여러 데이터프레임을 결합할 때 각 데이터프레임의 출처를 구분할 수 있게 해주는 방법입니다. 각 데이터프레임레이블을 할당하여 계층적 인덱스(hierarchical index)를 생성합니다.
이 방법은 여러 소스의 데이터를 결합한 후에도 각 데이터의 출처를 추적해야 할 때 특히 유용합니다. keys 매개변수에 리스트를 전달하여 각 데이터프레임에 대한 식별자를 지정할 수 있습니다.
아래 예시에서는 두 데이터프레임을 'df1'과 'df2'라는 로 구분하여 결합합니다. 결과적으로 생성되는 데이터프레임은 두 레벨의 인덱스를 가지게 됩니다: 첫 번째 레벨은 데이터프레임의 출처를 나타내는 이고, 두 번째 레벨은 원래 데이터프레임인덱스입니다.
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']}) df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']}) result = pd.concat([df1, df2], keys=['df1', 'df2'])
Python
복사
A B df1 0 A0 B0 1 A1 B1 df2 0 A2 B2 1 A3 B3
Python
복사

주의사항

데이터프레임 구조 불일치 문제
예시: df1은 'A', 'B', 'C' 열을 가지고 있고 df2는 'B', 'C', 'D' 열을 가지고 있을 때
join='outer'를 사용하면 모든 열이 포함되고 없는 값은 NaN으로 채워짐
join='inner'를 사용하면 공통 열인 'B'와 'C'만 유지됨
메모리 사용량 관리
대용량 데이터(예: 1GB 이상) 결합 시 메모리 부족 현상 발생 가능
해결책: 데이터를 더 작은 청크로 나누어 순차적으로 처리
필요한 열만 선택하여 결합하는 것을 권장
인덱스 관리의 중요성
예시: df1df2 모두 0부터 시작하는 인덱스를 가질 때 중복 발생
ignore_index=True 사용 시 0부터 순차적으로 새로운 인덱스 생성
keys 파라미터와 함께 사용하여 출처 추적 가능
이러한 매개변수들을 상황에 맞게 적절히 조합하여 사용하면, 다양한 데이터 결합 시나리오에서 효과적으로 작업할 수 있습니다. 예를 들어, 대용량 데이터를 다룰 때는 join='inner'와 필요한 열만 선택하는 방식을 조합하여 메모리 효율성을 높일 수 있습니다.