데이터 합치기
실습 데이터
- 엑셀에서 특정 시트만 불러올 수 있음(
sheet_name) - 특정 열을 인덱스로 설정할 수 있음(
index_col=0: 0번째 열을 인덱스로 설정)
df_user = pd.read_excel('merge.xlsx', sheet_name='user')
df_purchase = pd.read_excel('merge.xlsx', sheet_name='purchase')
df_2023 = pd.read_excel('merge.xlsx', sheet_name='data_2023', index_col=0)
df_2024 = pd.read_excel('merge.xlsx', sheet_name='data_2024', index_col=0)
행(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')
퀴즈
사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.