데이터 조작을 위한 도구: merge, join, concat

2023. 5. 19. 11:15데이터 사이언스/데이터 사이언스 인트로

데이터 분석과 조작은 현대 비즈니스에서 무엇보다 중요한 요소입니다. 데이터를 효과적으로 합치고 조작하는 것은 정확한 분석과 의사 결정에 필수적입니다. 파이썬에는 그런 작업을 도와주는 유용한 기능이 있는데, Merge와 Join이 그 중 하나입니다. 이 글에서는 merge()와 join()의 개념과 사용법을 알아보고, 각각 장점과 단점에 대해 알아보겠습니다.

 

 

  1. Merge 함수: Merge 함수는 데이터프레임을 다른 데이터프레임과 합칠 때 사용됩니다. 두 데이터프레임을 공통된 열을 기준으로 합치는 방식입니다. Merge 함수는 내부 조인, 외부 조인, 왼쪽 조인, 오른쪽 조인 등 다양한 합치기 방식을 지원합니다. Merge 함수의 장점과 단점을 살펴보겠습니다.

장점:

  • 다양한 합치기 방식을 지원하여 유연하게 데이터를 합칠 수 있습니다.
  • 시리즈에서도 사용 가능 (단, 이름이 지정되어 있어야 함)

 

단점:

  • 데이터프레임이 크면 처리 시간이 오래 걸릴 수 있습니다.
  • 열 이름이 중복되면 충돌이 발생할 수 있습니다.

데이터를 합치는 다양한 방법

예시: 두 개의 데이터프레임 df1와 df2를 Merge하여 새로운 데이터프레임 df3를 생성하는 예시를 살펴보겠습니다.

#inner join
#Inner join은 두 데이터프레임에서 공통된 열을 기준으로 일치하는 행만을 가져옵니다.
import pandas as pd

df1 = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'],
                  'Value_A': ['A0', 'A1', 'A2', 'A3']})

df2 = pd.DataFrame({'Key': ['K0', 'K1', 'K2', 'K3'],
                  'Value_B': ['B0', 'B1', 'B2', 'B3']})

df3 = pd.merge(df1, df2, on='Key') #on='inner'로 해도 됨
print(df3)

#   Key Value_A Value_B
# 0  K0      A0      B0
# 1  K1      A1      B1
# 2  K2      A2      B2
# 3  K3      A3      B3
#outer join
#Outer join은 양쪽 데이터프레임에서 겹치지 않는 모든 행을 포함하는 합집합을 만듭니다.
import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3],
                    'B': ['A0', 'A1', 'A2']})

df2 = pd.DataFrame({'C': [3, 4, 5],
                    'D': ['B1', 'B2', 'B3']})

df3 = pd.merge(df1, df2, how='outer')
print(df3)

#    A   B    C    D
# 0  1  A0  NaN  NaN
# 1  2  A1  NaN  NaN
# 2  3  A2  3.0   B1
# 3  NaN NaN  4.0   B2
# 4  NaN NaN  5.0   B3

 

  1. Join 함수: Join 함수는 인덱스를 기준으로 데이터프레임이나 시리즈를 합칠 때 사용됩니다. Join 함수의 장점과 단점을 알아보겠습니다.

장점:

  • 인덱스를 기준으로 합치기 때문에 간단하게 사용할 수 있습니다.
  • 데이터프레임과 시리즈 모두에 적용할 수 있습니다.

 

단점:

  • 내부 조인만 지원하기 때문에 외부 조인이 필요한 경우에는 Merge 함수를 사용해야 합니다.
  • 인덱스 중복 처리에 유의해야 하며, 충돌이 발생할 수 있습니다.

 

예시: 두 개의 시리즈 X와 Y를 Join하여 새로운 시리즈 Z를 생성하는 예시를 살펴보겠습니다.

X = pd.Series(['A0', 'A1', 'A2'], index=['K0', 'K1', 'K2'])
Y = pd.Series(['B0', 'B1', 'B2'], index=['K1', 'K2', 'K3'])

Z = X.join(Y)
print(Z)

# K0    NaN
# K1     A0
# K2     A1
# K3     A2
# dtype: object

 

 

즉, Merge 함수는 다양한 합치기 방식을 지원하여 데이터프레임을 유연하게 합칠 수 있으며, Join 함수는 간단하게 인덱스를 기준으로 데이터프레임이나 시리즈를 합칠 수 있습니다. 각각의 장점과 단점을 고려하여 작업에 맞는 함수를 선택해보세요. 

 

자세한 내용과 예시 코드를 확인하고 싶다면 아래 자료들을 참고해보세요.

  1. Pandas 공식 문서:
  2. Real Python 블로그:
  3. Towards Data Science 블로그: