Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – merge() 함수로 DataFrame 외부 조인(Outer Join) 병합하기

Pandas에서 두 개의 DataFrame을 하나로 합치려면 merge() 함수를 사용합니다. 이때 how 매개변수에 "outer"를 지정하면 외부 조인(Outer Join)이 수행되어 양쪽 DataFrame의 모든 행이 결과에 포함됩니다.

how = "outer"

1단계: Pandas 라이브러리 임포트

먼저 pandas 라이브러리를 별칭(alias)과 함께 가져옵니다.

import pandas as pd

2단계: 첫 번째 DataFrame 생성

차량 모델별 판매 대수 정보를 담은 DataFrame을 만들어 보겠습니다.

dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
      "Units": [100, 150, 110, 80, 110, 90]
   }
)

3단계: 두 번째 DataFrame 생성

차량 모델별 등록 가격 정보를 담은 또 다른 DataFrame을 생성합니다.

dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
      "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
   }
)

4단계: 공통 열 'Car' 기준으로 외부 조인 수행

두 DataFrame에 공통으로 존재하는 Car 열을 기준(on)으로 삼고, how 매개변수에 "outer"를 지정하여 병합합니다.

mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="outer")

전체 예제 코드

import pandas as pd

# 첫 번째 DataFrame 생성
dataFrame1 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Audi', 'Mustang', 'Bentley', 'Jaguar'],
      "Units": [100, 150, 110, 80, 110, 90]
   }
)

print("DataFrame1 ...\n", dataFrame1)

# 두 번째 DataFrame 생성
dataFrame2 = pd.DataFrame(
   {
      "Car": ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
      "Reg_Price": [7000, 1500, 5000, 8000, 9000, 6000]
   }
)

print("\nDataFrame2 ...\n", dataFrame2)

# 공통 열 Car를 기준으로 how="outer"를 적용해 외부 조인 병합
mergedRes = pd.merge(dataFrame1, dataFrame2, on ='Car', how ="outer")
print("\n외부 조인으로 병합된 DataFrame...\n", mergedRes)

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

DataFrame1 ...
        Car   Units
0      BMW     100
1    Lexus     150
2     Audi     110
3  Mustang      80
4  Bentley     110
5   Jaguar      90

DataFrame2 ...
         Car Reg_Price
0      BMW      7000
1    Lexus      1500
2    Tesla      5000
3  Mustang      8000
4 Mercedes      9000
5   Jaguar      6000

외부 조인으로 병합된 DataFrame...
         Car   Units Reg_Price
0      BMW   100.0    7000.0
1    Lexus   150.0    1500.0
2     Audi   110.0       NaN
3  Mustang    80.0    8000.0
4  Bentley   110.0       NaN
5   Jaguar    90.0    6000.0
6    Tesla     NaN    5000.0
7 Mercedes     NaN    9000.0

결과 해석

출력 결과를 보면 다음과 같은 특징을 확인할 수 있습니다.

모든 행이 유지됩니다. 외부 조인은 두 DataFrame의 키 값을 모두 포함합니다. 따라서 한쪽에만 존재하는 차량(Audi, Bentley, Tesla, Mercedes)도 결과에 나타납니다.
누락된 값은 NaN으로 표시됩니다. Audi와 Bentley는 두 번째 DataFrame에 없으므로 Reg_Price가 NaN이 되고, 반대로 Tesla와 Mercedes는 첫 번째 DataFrame에 없어 Units가 NaN으로 채워집니다.
숫자형 데이터가 실수(float)로 변환됩니다. NaN이 포함되면서 정수 열이 자동으로 실수형으로 승격된 점도 참고하세요.

이처럼 pd.merge()how="outer" 옵션은 데이터 손실 없이 두 데이터셋의 전체 정보를 결합할 때 매우 유용합니다.