데이터 합치기
실습 데이터
복사해서 붙여 쓰세요
import pandas as pd
import numpy as np
np.random.seed(42)
# 예제 1: 고객 정보 (df_user)
df_user = pd.DataFrame({
'user_id': [101, 102, 103, 104],
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': np.random.randint(20, 50, 4)
})
# 예제 2: 구매 내역 (df_purchase)
df_purchase = pd.DataFrame({
'purchase_id': [1001, 1002, 1003, 1004, 1005],
'user_id': [101, 103, 101, 104, 103],
'item': ['A', 'B', 'C', 'A', 'D']
})
# 예제 3: 2023년 데이터 (df_2023)
df_2023 = pd.DataFrame(
np.random.randint(0, 100, (3, 4)),
columns=['A', 'B', 'C', 'D'],
index=[202301, 202302, 202303]
)
# 예제 4: 2024년 데이터 (df_2024)
df_2024 = pd.DataFrame(
np.random.randint(0, 100, (3, 4)),
columns=['A', 'B', 'C', 'D'],
index=[202401, 202402, 202403]
)
행(Row) 기준 합치기
axis=0(기본값): 위-아래로 합침.- 두 DataFrame의 컬럼 이름이 같아야 의미 있음.
pd.concat([df_2023, df_2024])
concat후, 인덱스가 중복될 수 있음 (e.g., 202301, 202401...)- 기존 인덱스를 무시하고 0, 1, 2, ... 순서로 새 인덱스 부여.
pd.concat(
[df_2023, df_2024],
ignore_index=True
)
열(Column) 기준 합치기
axis=1: 좌-우로 합침.- 두 DataFrame의 인덱스(Index)를 기준으로 정렬/결합됨.
- 인덱스가 한쪽에만 존재하면, 해당 행의 반대쪽 데이터는 NaN (결측치) 처리됨.
pd.concat([df_2023, df_2024], axis=1)
컬럼 값을 기준으로 합치기
pd.merge(): SQL에서 JOIN과 같음concat과 달리, 공통된 '키(Key)' 컬럼을 기준으로 데이터를 병합.user_id컬럼의 값을 기준으로df_user(고객 정보)와df_purchase(구매 내역)을 결합
pd.merge(df_user, df_purchase, on='user_id')
- 내부(inner) 조인: 양쪽에 모두 값이 있는 경우만 결합(기본)
pd.merge(df_user, df_purchase, on='user_id', how='inner')
외부 조인
- 왼쪽 표에 오른쪽 표를 붙임(오른쪽 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='left')
- 오른쪽 표에 왼쪽 표를 붙임(왼쪽 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='right')
- 어느 쪽이든 표에 있으면 모두 포함(다른 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='outer')
키 컬럼 이름이 다를 때
- 구매 데이터를 복사하여
user_id컬럼을customer_id로 바꿈
df_purchase_new = df_purchase.copy()
df_purchase_new.columns = ['purchase_id', 'customer_id', 'item']
df_purchase_new
left_on과right_on으로 키 컬럼을 지정
pd.merge(df_user, df_purchase_new, left_on='user_id', right_on='customer_id')
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.