Pandas Join: 데이터프레임 합치기의 모든 것
파이썬을 사용해 데이터 분석을 하다 보면, 두 개 이상의 데이터프레임(DataFrame)을 합쳐야 할 때가 많습니다. 이럴 때 매우 유용하게 사용할 수 있는 기능이 바로 Pandas의 join()
입니다. 이번 글에서는 pandas join
에 대해 개념부터 사용법, 다양한 예시까지 최대한 자세히 설명해보겠습니다.
Pandas Join이란?
join()
은 두 개의 데이터프레임을 특정 컬럼(또는 인덱스)을 기준으로 병합(Merge) 하는 기능입니다. 기본적으로 SQL의 JOIN과 비슷한 동작을 하며, 다양한 유형의 조인(inner, left, right, outer)을 지원합니다.
join()
메서드는 주로 인덱스를 기준으로 데이터를 합치기 때문에, 컬럼을 기준으로 합치고 싶을 경우 약간의 주의가 필요합니다.
기본 문법
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
- other: 합칠 데이터프레임
- on: 조인할 기준 컬럼 (기본은 인덱스 기준)
- how: 조인의 종류 (left, right, outer, inner)
- lsuffix, rsuffix: 컬럼 이름 충돌 시 붙일 접미사
- sort: 조인 결과를 정렬할지 여부
조인의 종류
- left join (기본값)
- 왼쪽 데이터프레임을 기준으로 맞춰서 병합합니다.
- right join
- 오른쪽 데이터프레임을 기준으로 맞춰서 병합합니다.
- outer join
- 양쪽 데이터프레임의 모든 인덱스(또는 컬럼)를 포함해서 병합합니다.
- inner join
- 양쪽 모두에 존재하는 인덱스(또는 컬럼)만 병합합니다.
간단한 예제
데이터 준비
import pandas as pd
# 첫 번째 데이터프레임
df1 = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35]
}).set_index('name')
# 두 번째 데이터프레임
df2 = pd.DataFrame({
'name': ['Alice', 'Bob', 'David'],
'city': ['Seoul', 'Busan', 'Incheon']
}).set_index('name')
df1
name | age |
---|---|
Alice | 25 |
Bob | 30 |
Charlie | 35 |
df2
name | city |
---|---|
Alice | Seoul |
Bob | Busan |
David | Incheon |
left join
result = df1.join(df2, how='left')
print(result)
name | age | city |
---|---|---|
Alice | 25 | Seoul |
Bob | 30 | Busan |
Charlie | 35 | NaN |
- df1을 기준으로 df2의 city 컬럼을 가져왔습니다.
- Charlie는 df2에 없으므로 city 값이 NaN입니다.
inner join
result = df1.join(df2, how='inner')
print(result)
name | age | city |
---|---|---|
Alice | 25 | Seoul |
Bob | 30 | Busan |
- 양쪽에 모두 존재하는 name만 병합했습니다.
outer join
result = df1.join(df2, how='outer')
print(result)
name | age | city |
---|---|---|
Alice | 25.0 | Seoul |
Bob | 30.0 | Busan |
Charlie | 35.0 | NaN |
David | NaN | Incheon |
- 둘 중 어느 쪽에 있든 모두 합쳐졌습니다.
- 값이 없는 곳은 NaN으로 표시됩니다.
컬럼 기준으로 join하기
기본적으로 join()
은 인덱스를 기준으로 합니다. 컬럼 기준으로 하고 싶다면 on
파라미터를 사용하거나, 데이터프레임을 미리 인덱스 설정 없이 만들어야 합니다.
# 인덱스를 사용하지 않고 컬럼 기준으로 조인
df1 = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35]
})
df2 = pd.DataFrame({
'name': ['Alice', 'Bob', 'David'],
'city': ['Seoul', 'Busan', 'Incheon']
})
result = df1.set_index('name').join(df2.set_index('name'), how='inner').reset_index()
print(result)
이런 방식으로 컬럼을 인덱스로 설정한 뒤 join 후 다시 인덱스를 풀어주는 식으로 사용할 수 있습니다.
join과 merge의 차이점
많은 분들이 헷갈리는 부분이 join()
과 merge()
의 차이입니다.
- join(): 주로 인덱스를 기준으로 병합
- merge(): 주로 컬럼을 기준으로 병합 (SQL의 JOIN과 가장 비슷)
복잡한 병합을 하고 싶거나, 다중 컬럼 기준으로 합치고 싶을 땐 merge()
를 더 많이 사용합니다.
주의할 점
- join할 때 기준이 되는 컬럼(또는 인덱스)의 이름과 값이 정확히 일치해야 합니다.
- 중복된 컬럼명이 있으면
lsuffix
,rsuffix
로 구분해줘야 오류가 발생하지 않습니다. - 데이터가 큰 경우에는 병합 작업이 시간이 오래 걸릴 수 있습니다.
요약
Pandas의 join()
은 두 개의 데이터프레임을 간단하게 합치는 데 매우 유용합니다. 특히 인덱스를 기준으로 데이터를 병합할 때 깔끔하고 빠르게 처리할 수 있습니다. 데이터 분석, 전처리, 리포트 작성 등 다양한 작업에서 join()
을 적극적으로 활용해보세요.
'프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
[Pandas] MultiIndex (0) | 2025.04.16 |
---|---|
Python 축(axis) (0) | 2025.03.28 |
파이썬(Python) 텐서(Tensor)란? (0) | 2023.03.01 |
파이썬(Python) 아나콘다(Anaconda) 가상환경 설정 (0) | 2023.02.14 |
파이썬(Python) 개발 환경 설치 (2) | 2023.02.08 |