Computer Engineering/Data Engineering

Pandas DataFrame 조인 및 병합 / pandas merge, join, concat,

jordan.bae 2023. 7. 2. 00:38

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했습니다.

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

https://pandas.pydata.org/docs/user_guide/merging.html

반응형