-
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, join, concatenate and compare — pandas 1.1.0 documentation
pandas has full-featured, high performance in-memory join operations idiomatically very similar to relational databases like SQL. These methods perform significantly better (in some cases well over an order of magnitude better) than other open source imple
pandas.pydata.org
기본 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