언빌리버블티

[Python] Pandas 데이터 프레임 병합 메서드 - pd.merge() 본문

Language/Python

[Python] Pandas 데이터 프레임 병합 메서드 - pd.merge()

나는 정은 2022. 10. 7. 14:36

Pandas 데이터 프레임 합치기 - 2

pd.merge()

  • 두 데이터 프레임을 각 데이터에 존재하는 고유 Key값을 기준으로 병합한다.
    • DataFrame 기존 병합 메서드 join() 보다 좀 더 세부적인 설정이 가능한 메서드이다.
      • index - columns 기준 병합이 가능하다.
      • indicator : 병합에 대한 정보를 확인할 수 있다.
      • validate : 병합 방식을 확인할 수 있다.
    • SQL에서 JOIN과 같은 역할을 수행한다.
DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, 
                 left_index=False, right_index=False, sort=False, 
                  suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

 

각 파라미터에 대한 설명

  • left : 기준 테이블
  • right: left와 병합할 테이블
  • how : 병합시 기준이 될 인덱스를 정하는 방법. default = inner
    • left는 기존 테이블
    • right는 병합할 테이블
    • inner은 두 테이블의 인덱스의 교집합
    • outer은 두 테이블의 인덱스의 합집합
  • on : 열 기준 병합시 기준으로할 열의 이름이 서로 같다면, 기준이 되는 열을 정할 수 있다.
  • left_on / right_on : 열 기준 병합 시 기준으로 할 열의 양측 이름이 다를때 어떤 열을 기준으로 할지 정한다.
    • left_on : 기준열 이름이 다를 때, 왼쪽 기준열
    • right_on : 기준열 이름이 다를 때, 오른쪽 기준열
  • left_index / right_index : 어떤 테이블의 인덱스를 기준으로 병합을 할 지 지정한다. True or False
  • sort : 병합 후 인덱스의 사전적 정렬 여부
  • suffixes : 병합할 테이블 사이에 열 이름이 중복되는 경우 해당 열에 붙일 접미사를 지정
    • 튜플로 두 값을 한번에 입력.
  • copy : 사본을 생성할지 여부.
  • indicator : True로 할경우 병합이 완료된 테이블에 추가로 열을 하나 생성하여 병합 정보를 출력.
  • validate : {'1:1' / '1:m' / 'm:1' / 'm:m'} 병합 방식 검사
 

데이터 예시 )

s1 = pd.DataFrame({'Num':[10, 11, 12, 13, 14], 'Name':['철수', '유리', '짱구', '훈이', '맹구']})
s2 = pd.DataFrame({'Num':[10, 11, 12, ], 'Region':['대전', '서울', '부산']})
   Num  Name
0   10  철수
1   11  유리
2   12  짱구
3   13  훈이
4   14  맹구

   Num Region
0   10   대전
1   12   서울
2   15   부산
 
  • 두 테이블은 Num이라는 변수를 공통으로 가지는 데이터프레임이다.
    • 이 공통된 변수를 기준으로 데이터프레임을 merge한다.
 

how
:  join 형식 지정

# 기준열 이름이 같을 때
pd.merge(left, right, on = '기준열', how = '조인방식')
 

1) Left Join : 왼쪽 테이블을 기준으로 조인

  • 오른쪽 테이블에 존재하지 않는 값은 NaN으로 채운다.
left = s1 
right = s2 

# s1을 기준으로 joiin
pd.merge(s1, s2 , on = 'Num', how = 'left')

2) Right Join : 오른쪽 테이블을 기준으로 조인

  • 왼쪽 테이블에 존재하지 않는 값은 NaN으로 채운다.
# s2 를 기준으로 join 
pd.merge(s1, s2 , on = 'Num', how = 'right')

3) Inner Join : 교집합

  • 양쪽 테이블에 공통적으로 가지고 있는 열만 조인
pd.merge(s1, s2 , on = 'Num', how = 'inner')

4) Outer Join : 합집합

  • 두 테이블의 모든 값들을 다 가져온다.
    • 왼쪽, 오른쪽 테이블 어디에도 없는 값은 NaN 으로 채운다.
pd.merge(s1, s2 , on = 'Num', how = 'outer')
 

on
:  '기준이 되는 컬럼'  지정

공통으로 들어가는 기준 열이 여러 개일 경우

pd.merge(left, right, on = ['col1', 'col2'])

공통이 되는 기준 열의 이름이 다를 때

  • 양 테이블에서 기준이 되는 열의 이름이 다를 경우 왼쪽 테이블에서 기준으로 할 컬럼과 오른쪽 테이블에서 기준으로 할 컬럼을 지정해줘야 한다.
# 기준열 이름이 다를 때
pd.merge(left, right, left_on = '왼쪽 열', right_on = '오른쪽 열', how = '조인방식')
 
 
 

 

 

Comments