본문 바로가기
Python

Python Pandas: CONCAT과 MERGE로 데이터 합치기

by ssury94 2025. 1. 23.
 
 
 

 

Python의 데이터 분석 라이브러리인 Pandas는 데이터를 병합하거나 연결할 때 매우 강력한 기능을 제공합니다. 이번 글에서는 Pandas에서 concat과 merge를 사용해 데이터를 합치는 방법을 예제와 함께 살펴보겠습니다. 💡

 

데이터 준비 📃

먼저, 예제로 사용할 세 개의 데이터프레임을 만들어보겠습니다.

 

import pandas as pd

# 첫 번째 데이터프레임 (엔지니어링 부서의 직원 정보)
raw_data = {
    'Employee ID': ['1', '2', '3', '4', '5'],
    'first name': ['Diana', 'Cynthia', 'Shep', 'Ryan', 'Allen'],
    'last name': ['Bouchard', 'Ali', 'Rob', 'Mitch', 'Steve']
}
df_Engineering_dept = pd.DataFrame(raw_data, columns=['Employee ID', 'first name', 'last name'])

# 두 번째 데이터프레임 (재무부서의 직원 정보)
raw_data = {
        'Employee ID': ['6', '7', '8', '9', '10'],
        'first name': ['Bill', 'Dina', 'Sarah', 'Heather', 'Holly'], 
        'last name': ['Christian', 'Mo', 'Steve', 'Bob', 'Michelle']}
df_Finance_dept = pd.DataFrame(raw_data, columns = ['Employee ID', 'first name', 'last name'])
df_Finance_dept

# 세 번째 데이터프레임 (직원 급여 정보)
raw_data = {
    'Employee ID': ['1', '2', '3', '4', '5', '7', '8', '9', '10'],
    'Salary [$/hour]': [25, 35, 45, 48, 49, 32, 33, 34, 23]
}
df_salary = pd.DataFrame(raw_data, columns=['Employee ID', 'Salary [$/hour]'])

 

CONCAT:  부서 간 데이터 병합 🔐

concat은 데이터프레임이나 시리즈를 단순히 연결하는 방법입니다.

 

 

 

 

CONCAT: 데이터프레임 연결 🔀

concat은 데이터프레임을 행(row) 또는 열(column) 단위로 단순히 연결할 때 사용됩니다.

df_all=pd.concat( [df_Engineering_dept , df_Finance_dept ] , ignore_index = True)

 

행 방향(axis=0) 또는 열 방향(axis=1)으로 데이터를 연결

여러 개의 데이터프레임을 리스트 형식으로 입력하여 한 번에 연결

인덱스나 컬럼 이름이 같은 경우 중복된 데이터가 그대로 유지

MERGE와 달리 공통 열을 기준으로 데이터를 병합하지 않고, 단순히 데이터를 이어붙입니다.

 

df_all 출력결과:

Employee ID	first name	last name
0	1	Diana	Bouchard
1	2	Cynthia	Ali
2	3	Shep	Rob
3	4	Ryan	Mitch
4	5	Allen	Steve
5	6	Bill	Christian
6	7	Dina	Mo
7	8	Sarah	Steve
8	9	Heather	Bob
9	10	Holly	Michelle

 

 

MERGE: 공통 열을 기준으로 데이터 병합 🔐

merge는 두 데이터프레임을 특정 열을 기준으로 병합할 때 사용됩니다.

기본 사용법 🔄

# 두 데이터프레임을 Employee ID를 기준으로 병합
merged_df = pd.merge(df_all, df_salary, on='Employee ID')
print(merged_df)

위 코드의 결과는 다음과 같습니다:

 

 

엔지니어부 5명, 재무부 5명 총 10명인데 9명만 나왔습니다.

연봉데이터에 직원번호 6번 데이터가 없기 때문입니다.

 

how 옵션으로 병합 방식 지정 🌐

merge 함수는 how 파라미터로 병합 방식(조인 유형)을 설정할 수 있습니다. 기본값은 inner입니다.

  • inner: 교집합(공통 데이터만 유지)
  • left: 왼쪽 데이터프레임의 모든 데이터 유지
  • right: 오른쪽 데이터프레임의 모든 데이터 유지
  • outer: 합집합(모든 데이터 포함)
# left join: 왼쪽 데이터프레임의 모든 데이터를 유지하며 오른쪽 데이터프레임과 병합
left_join_df = pd.merge(df_all, df_salary, on='Employee ID', how='left')
print(left_join_df)

# right join: 오른쪽 데이터프레임의 모든 데이터를 유지하며 왼쪽 데이터프레임과 병합
right_join_df = pd.merge(df_all, df_salary, on='Employee ID', how='right')
print(right_join_df)

# outer join: 두 데이터프레임의 모든 데이터를 포함
outer_join_df = pd.merge(df_all, df_salary, on='Employee ID', how='outer')
print(outer_join_df)

결과 예시:

  • Left Join:

  • Right Join:

  • Outer Join:

 

 

추가 팁: merge와 concat의 차이 💡

  • merge는 두 데이터프레임 간의 관계를 설정하고, 공통 열을 기준으로 데이터를 병합합니다.
  • concat은 데이터프레임을 단순히 붙이는 작업에 사용되며, 행 또는 열을 기준으로 연결합니다.
  •  

정리 🌟

Pandas의 concat과 merge를 활용하면 데이터프레임을 다양한 방식으로 유연하게 병합하고 연결할 수 있습니다. 데이터를 병합할 때의 요구사항(예: 공통 열 기준, 데이터 포함 범위)에 따라 적절한 방법을 선택하세요. 위에서 소개한 다양한 옵션과 사용법을 잘 익혀 데이터 분석에 활용해 보세요! 🚀