[Pandas] join
Pandas join, DataFrame.join
정의
DataFrame.join(other) 는 index 기반 결합 의 편의 API. 내부적으로는 merge(left_index=True, right_index=True, ...) 와 동등하지만 더 짧다.
기본
left.join(right) # left join (기본), index 기준
left.join(right, how='outer')
left.join(right, on='key') # left 의 key 컬럼 vs right 의 index
merge 와의 비교
# 둘은 같음
left.join(right, how='inner')
pd.merge(left, right, left_index=True, right_index=True, how='inner')
join 은 index 끼리 매칭이 기본 가정이라 코드가 짧다. 컬럼 기준 결합이면 merge 가 명확.
사용 예
python
import pandas as pd
users = pd.DataFrame({'name':['Alice','Bob']}, index=[1, 2])
orders = pd.DataFrame({'amount':[100, 200, 50]}, index=[1, 1, 3])
print(users.join(orders, how='outer')) 결과
name amount
1 Alice 100.0
1 Alice 200.0
2 Bob NaN
3 NaN 50.0| name | amount | |
|---|---|---|
| 1 | Alice | 100.0 |
| 1 | Alice | 200.0 |
| 2 | Bob | NaN |
| 3 | NaN | 50.0 |
여러 DataFrame 동시 join
a.join([b, c, d], how='outer')
merge 보다 깔끔. 단, 모두 같은 index 기준.
컬럼 충돌
a.join(b, lsuffix='_a', rsuffix='_b')
# 양쪽 컬럼 이름 충돌 시 suffix
on 파라미터 (left 의 컬럼 vs right 의 index)
orders.join(products, on='product_id')
# orders['product_id'] 와 products.index 매칭
SQL 의 LEFT JOIN products ON orders.product_id = products.id 패턴.
merge vs join 언제 무엇을
| 시나리오 | 권장 |
|---|---|
| 양쪽 모두 일반 컬럼 | merge |
| 양쪽 모두 index | join |
| left 컬럼 + right index | join(on='col') 또는 merge |
| 다중 DataFrame 한 번에 | join([b, c, d]) |
| 다대다 검증 | merge(validate=...) |
함정
1. 기본 how 가 다름
| merge | join | |
|---|---|---|
| 기본 how | inner | left |
2. index 가 unique 가 아니면 폭증
# index 가 중복인 채로 join → 곱셈 행
# validate 옵션이 join 에는 없음 → merge 권장
3. 동일 이름 컬럼
lsuffix / rsuffix 둘 다 default 가 '' 이므로 충돌하면 에러.
a.join(b) # ValueError: columns overlap
a.join(b, lsuffix='_a') # 한 쪽만 줘도 가능
참고
이 글의 용어 (3개)
- [Pandas] concatpandas
- 정의 는 여러 DataFrame/Series 를 세로 (axis=0) 또는 가로 (axis=1) 로 단순 연결. SQL 의 (axis=0) 또는 column-level conca…
- [Pandas] DataFramepandas
- 정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
- [Pandas] mergepandas
- 정의 는 두 DataFrame 을 SQL join 처럼 결합. 4 가지 join 타입 (inner / left / right / outer) 지원. 시각화 4 가지 join 타입…
💬 댓글