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