-
Pandas 데이터 세트 결합하기: 병합과 조인데이터 분석/Pandas 2020. 8. 13. 07:16
Pandas 공식 User Guide 에서도 확인할 수 있다.
- 선수지식: SQL JOIN
Merge, join, concatenate and compare
https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
기본 merge 함수를 이해한 후에, 위 포스트도 찬찬히 읽어볼 예정 :D
pandas.merge
pd.merge() 는 두 개의 입력값 사이에 일치하는 하나 이상의 열 이름을 찾아 그것을 키로 사용한다.
- 1:1, 1:N, N:N JOIN 모두 가능하다.
- 기본적으로 INNER JOIN 으로 동작한다.
df1 = pd.DataFrame( {'name':['Bob', 'Jake', 'Lisa', 'Sue'], 'group':['Accounting', 'Engineering', 'Engineering', 'HR']} ) df2 = pd.DataFrame( {'name':['Bob', 'Jake', 'Lisa', 'Sue'], 'hire_date':[2004, 2008, 2012, 2014]} ) df3 = pd.merge(df1, df2)
1. 일치하는 열이 없으면 에러를 출력한다.
No common columns to perform merge on. Merge options:
left_on=None, right_on=None,
left_index=False, right_index=False2. 일치하는 열 이름 기준으로 왼쪽, 오른쪽 데이터에 일치하는 값이 있으면 결과에서 가져온다. 없으면 결과에서 빠진다. - INNER JOIN
3. 일치하는 열이 2개 이상이면 2개 조합 기준으로 왼쪽, 오른쪽 데이터에 일치하는 값이 있으면 결과에서 가져온다. 없으면 결과에서 빠진다.
merge key 지정
on 키워드
pd.merge(df1, df2, on="name") -- df1, df2, Join key 단일 열 이름으로 명시적으로 지정 df3 = pd.DataFrame( {'name':['Bob', 'Jake', 'Lisa', 'Sue'], 'salary':[70000, 80000, 120000, 90000]} ) pd.merge(df1, df3, left_on="employee", right_on="name") -- df1, df2, Join key 를 왼쪽, 양쪽 데이터셋에 대해서 각각 명시적으로 지정 pd.merge(df1, df3, left_on="employee", right_on="name").drop('name', axis=1) -- 불필요하게 중복된 열을 갖게 되며, drop() 으로 삭제 가능
left_index 와 right_index 키워드
열을 병합하는 대신 인덱스로 병합해야할 경우 활용한다. 인덱스와 열이름 각자 활용해도 된다!
df1a = df1.set_index('employee') df2a = df2.set_index('employee') pd.merge(df1a, df2a, left_index=True, right_index=True) -- 양쪽 데이터셋 모두 index 기준으로 JOIN pd.merge(df1a, df2, left_index=True, right_on="employee") -- 왼쪽은 index 로 right 는 열이름 기준으로 JOIN
집합 연산 유형
Inner Join 을 기본으로 한다. 단, how 키워드로 JOIN 유형을 명시적으로 지정할 수 있다.
df6 = pd.DataFrame( {'name': ['Peter', 'Paul', 'Mary'], 'food': ['fish', 'beans', 'bread']}, columns = ['name', 'food'] ) df7 = pd.DataFrame( {'name': ['Mary', 'Joseph'], 'drink': ['wine', 'beer']}, columns = ['name', 'drink'] ) pd.merge(df6, df7, how='inner') pd.merge(df6, df7, how='outer') pd.merge(df6, df7, how='left') -- how 키워드로 JOIN 유형 지정 가능
'데이터 분석 > Pandas' 카테고리의 다른 글
Pandas 데이터 먼징 실습 1 - Null/Outlier 처리 및 데이터타입 변환 (0) 2020.08.24 Pandas 병합과 조인 연산 (파이썬 데이터 사이언스 핸드북 예시) (0) 2020.08.20 Pandas 누락값 처리 - Handling Missing Values IN Python (0) 2020.08.08 Pandas 데이터 연산하기 (NULL 처리 포함) (1) 2020.06.27 데이터 인덱싱과 선택 - DataFrame (0) 2020.06.15