Pandas는 Python에서 데이터 조작 및 분석을 위한 강력한 도구로, 특히 DataFrame 객체를 통해 테이블 형식의 데이터를 다루는 데 유용합니다. DataFrame을 조인하는 것은 데이터 분석 및 처리에서 핵심적인 작업 중 하나입니다. 이번 글에서는 Pandas의 DataFrame을 조인하는 다양한 방법과 그 활용법에 대해 정리해보려고 합니다.
Concat
함수는 Pandas 라이브러리에서 제공되는 함수로, 여러 개의 DataFrame 또는 Series를 연결(concatenate)하는 데 사용됩니다. 주어진 axis에 따라 객체를 열 또는 인덱스를 기준으로 연결합니다.
pd.concat(
objs,
axis=0,
join="outer",
ignore_index=False,
keys=None,
levels=None,
names=None,
verify_integrity=False,
copy=True,
)
- objs: 연결할 DataFrame 또는 Series의 리스트, 튜플, 딕셔너리 등의 iterable한 객체입니다.
- axis: 연결할 축을 지정합니다. 0은 인덱스(행) 방향, 1은 열 방향을 나타냅니다.
- join: 조인 유형을 지정합니다. 'outer'는 합집합 조인, 'inner'는 교집합 조인을 수행합니다.
- ignore_index: 인덱스를 무시하고 새로운 인덱스를 생성할지 여부를 지정합니다.
concat 함수는 아래와 같은 경우 주로 사용합니다.
1. 여러 개의 DataFrame을 행 또는 열 방향으로 연결 할 때.
2. 인덱스 또는 열을 기준으로 DataFrame을 조인할 때. (조인을 inner, outer만 지웒함)
3. 여러 개의 Serires를 하나의 DataFrame으로 결합할 때.
[예제 코드]
import pandas as pd
# 예시 데이터 프레임 생성
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
# 조인 수행, 칼럼 기준(axis=1)
concat_df = pd.concat([df1.set_index('key'), df2.set_index('key')], axis=1, join='inner')
print(concat_df)
value1 value2
key
B 2 5
D 4 6
Merge
merge는 database의 join과 비슷한 기능입니다. pandas는 SQL과 같은 관계형 데이터베이스와 아주 유사한 기능을 갖춘 완전한 기능의 고성능 인메모리 조인 연산을 제공합니다. 이러한 메소드들은 다른 오픈 소스 구현 (예: R의 base::merge.data.frame)보다 훨씬 뛰어난 성능을 발휘합니다. 이는 정교한 알고리즘 설계와 DataFrame 내부 데이터의 내부 레이아웃에 기인합니다.
pd.merge(
left,
right,
how="inner",
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
sort=True,
suffixes=("_x", "_y"),
copy=True,
indicator=False,
validate=None,
)
- left: driving DataFrame
- right: 조인할 DataFrame 또는 Series입니다.
- how: 조인 유형을 지정합니다. 'inner', 'outer', 'left', 'right' 중 하나를 선택할 수 있습니다. 기본값은 'inner'입니다.
- on: 조인할 열(Column) 또는 열의 리스트입니다. 공통 열을 기준으로 조인합니다.
- left_on, right_on: 좌측 DataFrame과 우측 DataFrame의 조인할 열(Column)을 각각 지정합니다.
- left_index, right_index: 좌측 DataFrame과 우측 DataFrame의 인덱스(Index)를 조인할지 여부를 지정합니다.
- sort: 조인 이후 결과를 정렬할지 여부를 지정합니다.
merge 함수는 주로 데이터베이스 스타일의 조인에 사용하기 때문에 1:1, M:1, M:M 조인에 사용할 수 있습니다.
[예제 코드]
import pandas as pd
# 예시 데이터 프레임 생성
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
# 조인 수행, key 칼럼을 기준으로 inner join
merged_df = pd.merge(df1, df2, on='key', how='inner')
>>> print(merged_df)
key value1 value2
0 B 2 5
1 D 4 6
Join
DataFrame.join()은 두 개의 인덱스가 서로 다를 수 있는 DataFrame의 열을 하나의 결과 DataFrame으로 결합하는 편리한 메서드입니다. 즉, 인덱스를 기준으로 join합니다. merge는 column을 기준으로 join했습니다.
[예제코드]
import pandas as pd
# 예시 데이터 프레임 생성
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value2': [5, 6, 7, 8]})
# 조인 수행, index를 기준으로 inner join
joined_df = df1.set_index('key').join(df2.set_index('key'), how='inner')
>>> print(joined_df)
value1 value2
key
B 2 5
D 4 6
정리
기준 | join | concat | merge |
인덱스 조인 | 가능 | 불가능 | 가능 |
열(칼럼) 조인 | 불가능 | 가능 | 가능 |
조인 유형 | left, right, inner, outer, cross | inner, outer | left, right, inner, outer, cross |
유연성 | 낮음 | 높음 | 높음 |
Pandas를 사용하여 DataFrame을 조인하는 방법을 익히면 데이터 분석과 처리 작업에서 유용하게 활용할 수 있습니다. 다양한 조인 방법을 이해하고 적절히 선택함으로써 데이터의 효율적인 처리와 분석을 할 수 있습니다.
Reference
'Computer Engineering > Data Engineering' 카테고리의 다른 글
초기 스타트업에서 Data Engineer는 어떤 일을 하나요? (0) | 2023.07.10 |
---|---|
Pandas DataFrame apply 성능 이슈 개선하기 (0) | 2023.07.08 |
Airflow CeleryKubernetesExecutor 사용하기 (0) | 2023.06.16 |
Pandas pivot_table 예제 및 설명 (0) | 2023.05.01 |
Airflow Scheduler 역할 및 성능 개선 정리 (0) | 2023.04.14 |