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

Pandas 데이터프레임을 공통 열 기준으로 병합하고 일치하지 않는 값은 NaN으로 설정하기

Pandas에서 두 개의 DataFrame을 공통 열을 기준으로 병합하려면 merge() 함수를 사용하고, on 매개변수에 병합 기준이 될 열 이름을 지정하면 됩니다.

또한 한쪽 DataFrame에만 존재하는 일치하지 않는 값에 대해 NaN을 설정하려면 how 매개변수를 left 또는 right로 지정해야 합니다. 이는 각각 왼쪽 DataFrame 또는 오른쪽 DataFrame의 모든 행을 유지하면서 병합한다는 의미입니다.

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'를 기준으로 병합합니다. how="left"로 설정하면 왼쪽 DataFrame(dataFrame1)의 모든 행이 유지되며, 두 번째 DataFrame에 존재하지 않는 차량(Audi, Bentley)의 Reg_Price 값은 NaN으로 표시됩니다.

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

전체 예제 코드

다음은 위 과정을 모두 포함한 전체 코드입니다.

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를 기준으로 병합, "left"는 두 번째 DataFrame에서
# 일치하지 않는 값에 대해 NaN을 설정함
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")
print("\n공통 열 기준으로 병합된 데이터프레임...\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

공통 열 기준으로 병합된 데이터프레임...
       Car   Units   Reg_Price
0     BMW     100      7000.0
1    Lexus     150      1500.0
2     Audi     110         NaN
3  Mustang      80      8000.0
4  Bentley     110         NaN
5   Jaguar      90      6000.0

참고: how 매개변수의 주요 옵션

how 매개변수에는 다음과 같은 옵션이 있으며, 상황에 따라 적절히 선택하여 사용할 수 있습니다.

  • left: 왼쪽 DataFrame의 모든 행을 유지하고, 오른쪽에 일치하지 않는 값은 NaN으로 설정
  • right: 오른쪽 DataFrame의 모든 행을 유지하고, 왼쪽에 일치하지 않는 값은 NaN으로 설정
  • outer: 양쪽 DataFrame의 모든 행을 유지하며, 일치하지 않는 값은 NaN으로 설정
  • inner(기본값): 양쪽에 모두 존재하는 행만 병합하며, 일치하지 않는 행은 제외됨

이처럼 merge() 함수의 on과 how 매개변수를 조합하면 공통 열을 기준으로 유연하게 데이터프레임을 병합할 수 있습니다.