[pandas] 두 개의 DataFrame을 SQL처럼 JOIN 하는 방법

2023. 5. 8. 15:28·Python/pandas

python으로 데이터를 분석하거나, SQL 디버깅 작업 중 pandas를 많이 사용하는데,

사이즈가 다른 두 개의 DataFrame을 하나의 컬럼을 기준으로 SQL처럼 JOIN 문을 사용하듯이 JOIN을 수행할 수 있다.

 

Inner Join

예를 들어, 아래와 같이 df1과 df2 두 개의 DataFrame이 있다고 가정해보자.

import pandas as pd

df1 = pd.DataFrame({'k_id': [1, 2, 3, 4], 'A': [10, 20, 30, 40]})
df2 = pd.DataFrame({'k_id': [2, 3], 'B': [50, 60]})

 

이제 두 개의 DataFrame을 Inner Join 하기 위해서는 merge() 함수를 사용한다. 이때, on 파라미터에 기준이 되는 컬럼을 지정하고, how 파라미터에 Inner Join을 수행하도록 지정한다.

result = pd.merge(df1, df2, on='k_id', how='inner')

 

결과적으로 result DataFrame에는 df1 DataFrame과 df2 DataFrame에서 모두 k_id 컬럼 값이 일치하는 행만 남는다.

# 결과
   k_id   A   B
0     2  20  50
1     3  30  60

 

Left Outer Join

result = pd.merge(df1, df2, on='k_id', how='left')

.merge() 메서드의 how 옵션만 'left'로 바꾼다.

 

Right Outer Join

result = pd.merge(df1, df2, on='k_id', how='right')

.merge() 메서드의 how 옵션만 'right'로 바꾼다.

 

Full Outer Join

result = pd.merge(df1, df2, on='k_id', how='outer')

.merge() 메서드의 how 옵션만 'outer'로 바꾼다.

 

잠깐!

Left든, Right든 Full이든 Outer Join을 수행하면, k_id에 의해 Join되지 않은 값들은 모두 NaN으로 처리된다.

 

* NaN에 대한 처리는 pandas의 .fillna() 메서드나 .replace() 메서드로 다른 값으로 대체할 수 있다.

 

.fillna()

result.fillna(0, inplace=True)

NaN 값을 0으로 대체되며, inplace=True 옵션에 의해 result DataFrame 자체에 즉시 수정이 된다.

 

.replace()

result.replace(np.nan, 0, inplace=True)

마찬가지로, NaN 값을 0으로 대체되며, inplace=True 옵션에 의해 result DataFrame 자체에 즉시 수정이 된다.

'Python > pandas' 카테고리의 다른 글

[pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기  (0) 2023.05.08
[python] pandas DataFrame Index 초기화  (0) 2023.02.22
'Python/pandas' 카테고리의 다른 글
  • [pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기
  • [python] pandas DataFrame Index 초기화
옐리yelly
옐리yelly
전시회에서 도슨트를 따라다니며 작품 해설을 들으면 더 재밌었던 기억들이 있습니다. 글로 더 재밌는 개발이 되도록 노력하고 있습니다.
  • 옐리yelly
    개발 갤러리
    옐리yelly
  • 전체
    오늘
    어제
    • 모든 글 보기 (82)
      • Project (22)
      • Java (4)
      • Spring (6)
      • Kubernetes (6)
      • Docker (2)
      • JPA (2)
      • Querydsl (2)
      • MySQL (8)
      • ElasticSearch (7)
      • DevOps (4)
      • Message Broker (3)
      • Git & GitHub (2)
      • Svelte (1)
      • Python (8)
        • Python Distilled (4)
        • Anaconda (1)
        • Django (0)
        • pandas (3)
      • Algorithm (1)
      • Computer Science (0)
      • 내 생각 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OOP
    pymysql
    프로젝트
    비사이드
    k8s
    MySQL
    Spring
    devops
    Project
    nks
    JPA
    svelte
    blue-green 배포
    pandas
    RabbitMQ
    dataframe
    ncloud
    포텐데이
    docker
    querydsl
    예약 시스템
    커넥션 풀
    gitops
    Python
    argocd
    리팩토링
    데드락
    elasticsearch
    Message Broker
    성능 테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
옐리yelly
[pandas] 두 개의 DataFrame을 SQL처럼 JOIN 하는 방법
상단으로

티스토리툴바