0️⃣ 데이터프레임 생성
- 예시가 될 데이터프레임 2개를 먼저 만들어 볼게요.
import pandas as pd
import numpy as np
# 병합할 데이터프레임 2개 생성
df_1 = pd.DataFrame({
'product' : ['onion', 'carrot', 'cabbage', 'pumpkin', 'potato'],
'amount' : [100, 50, 70, 30, 80]
})
df_2 = pd.DataFrame({
'product' : ['pumpkin', 'potato', 'garlic', 'corn', 'pepper'],
'amount' : [20, 60, 90, 80, 50]
}, index = [3,4,5,6,7])
1️⃣ 칼럼 이름이 동일한 데이터프레임끼리 합치는 경우
1️⃣-1. 행 레벨로 합치기 (기본값, axis=0)
- 두 데이터프레임을 행 레벨로 = 위아래로 붙이고 싶은 경우 파라미터를 지정하지 않아도 됩니다. axis=0 이 디폴트값이거든요.
- 다만 이렇게 병합하면 인덱스도 원래것 그대로 붙습니다. 인덱스 초기화가 필요하다면 ignore_index = True 를 추가해주세요.
- 혹시 몇천 몇만행짜리 데이터프레임을 합쳐야 하는데, 인덱스가 중복되는지 확인하고 싶은 경우라면
파라미터 verify_integrity = True 를 추가하세요. 중복된다면 에러가 뜨도록 해주는 파라미터입니다.
# 기존 인덱스들을 유지하면서 병합 (디폴트)
pd.concat([df_1, df_2])
# 병합하면서 인덱스 초기화
pd.concat([df_1, df_2], ignore_index = True)
1️⃣-2. 칼럼(열) 레벨로 합치기 (axis=1)
- 두 데이터프레임을 열 레벨로 = 옆으로 붙이고 싶다면 axis=1 로 지정해줘야 합니다.
- 아래처럼 인덱스 기준으로 병합되기 때문에, 원래 데이터프레임에 없던 셀들은 NaN으로 채워집니다.
# 칼럼 레벨로 병합 (옆으로 붙임)
pd.concat([df_1, df_2], axis=1)
2️⃣ 칼럼 이름이 다른 데이터프레임끼리 합치는 경우
- 위에서 만들었던 df_2 에 새로운 칼럼을 붙였습니다. 이제 두 데이터프레임의 칼럼이 다른데요,
이런 경우 파라미터 join 을 추가하여, 어떤 방식으로 병합할지 정해줘야 합니다.
2️⃣-1. 합집합으로 병합하기 (Outer Join)
- 합집합처럼, 한쪽에 없는 칼럼이어도 포함해서 병합하는 방식입니다.
- 파라미터 join = 'outer' 로 지정해주면 됩니다. (데이터베이스 Outer Join과 동일한 방식)
- 아래처럼 df_2의 grade 칼럼까지 포함해서 합쳐집니다. df_1에서 grade는 없는 칼럼이었으니 NaN값으로 채워지구요.
2️⃣-2. 교집합으로 병합하기 (Inner Join)
- 마찬가지로 교집합처럼, 한쪽에 없는 칼럼이면 제외하고 공통으로 존재하는 칼럼만 남기는 방식입니다.
- 파라미터 join = 'inner' 로 지정해주면 됩니다. (데이터베이스 Inner Join과 동일한 방식)
# 합집합 방식으로 병합하기 (Outer Join) : 한쪽에 없는 칼럼이어도 전부 포함
pd.concat([df_1, df_2], join = 'outer')
# 교집합 방식으로 병합하기 (Inner Join) : 한쪽에 없는 칼럼이면 제외, 공통 칼럼만 남김
pd.concat([df_1, df_2], join = 'inner')