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" 옵션은 데이터 손실 없이 두 데이터셋의 전체 정보를 결합할 때 매우 유용합니다.