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

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

공통 열(Column)을 기준으로 두 개의 Pandas 데이터프레임을 병합하려면 merge() 함수를 사용하고, on 매개변수에 해당 열 이름을 지정하면 됩니다. 일치하지 않는 값에 대해 NaN을 설정하려면 how 매개변수를 left 또는 right로 지정합니다. 이는 왼쪽 또는 오른쪽 데이터프레임을 기준으로 병합한다는 의미입니다.

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

먼저 별칭(alias)을 사용하여 pandas 라이브러리를 임포트합니다.

import pandas as pd

2단계: 첫 번째 데이터프레임 생성

차량 정보를 담고 있는 DataFrame1을 생성합니다.

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

3단계: 두 번째 데이터프레임 생성

등록 가격 정보를 담고 있는 DataFrame2를 생성합니다.

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

4단계: 공통 열 기준으로 데이터프레임 병합

이제 공통 열인 'Car'를 기준으로 두 데이터프레임을 병합합니다. how='left' 옵션을 사용하면 왼쪽 데이터프레임의 모든 행이 유지되며, 두 번째 데이터프레임에서 일치하지 않는 값에는 NaN이 설정됩니다.

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

참고로 how 매개변수에는 다음과 같은 옵션이 있습니다.

  • left: 왼쪽 데이터프레임의 모든 행 유지
  • right: 오른쪽 데이터프레임의 모든 행 유지
  • inner: 양쪽에 모두 존재하는 행만 유지(기본값)
  • outer: 양쪽의 모든 행 유지

전체 예제 코드

다음은 전체 코드입니다.

import pandas as pd

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

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

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

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

# 공통 열 Car를 기준으로 병합하며, how="left"로 인해 일치하지 않는 값은 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

결과 분석

출력 결과를 보면, 왼쪽 데이터프레임(DataFrame1)의 모든 행이 그대로 유지된 것을 확인할 수 있습니다. 특히 AudiBentley는 두 번째 데이터프레임(DataFrame2)에 존재하지 않으므로 해당 행의 Reg_Price 값이 NaN으로 표시됩니다. 반면 BMW, Lexus, Mustang, Jaguar는 양쪽 데이터프레임에 모두 존재하므로 정상적으로 병합되었습니다.