Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Pandasで共通の列をキーにDataFrameをマージし、一致しない値をNaNで埋める方法

共通の列(カラム)を持つ2つのPandas DataFrameをマージするには、merge()関数を使用し、onパラメータに共通の列名を指定します。さらに、一致しない値に対してNaNを設定したい場合は、howパラメータを"left"または"right"に設定します。これはそれぞれ「左結合」「右結合」と呼ばれるマージ方法です。

まず、pandasライブラリをエイリアス付きでインポートします。

import pandas as pd

DataFrame1を作成します。

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

続いて、DataFrame2を作成します。

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

次に、共通の列「Car」をキーとして2つのDataFrameをマージします。how="left"を指定すると、左側のDataFrame(1つ目)のすべての行が保持され、右側のDataFrame(2つ目)に存在しない値にはNaNが自動的に設定されます。

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

サンプルコード

以下が完全なコードです。

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」でマージ。「left」を指定することで、
# 2つ目のDataFrameで一致しない値にNaNが設定される
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how="left")
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    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

出力結果のポイント

マージ後の結果を見ると、「Audi」と「Bentley」のReg_PriceがNaNになっています。これは、これらの車種がDataFrame2の「Car」列に存在しないためです。左結合では左側のDataFrameの全行が必ず残るため、対応するデータがない箇所は欠損値(NaN)として扱われます。

howパラメータの主な選択肢

  • "left":左側のDataFrameの全行を保持し、一致しない部分はNaNにする
  • "right":右側のDataFrameの全行を保持し、一致しない部分はNaNにする
  • "inner":両方に存在するキーのみを残す(デフォルト)
  • "outer":両方の全行を保持し、一致しない部分はNaNにする

  1. Python Pandas – DataFrameを1対1(one-to-one)の関係でマージする方法

    Pandas DataFrameを1対1の関係でマージする PandasのDataFrameをマージするには、merge()関数を使用します。1対1(one-to-one)の関係は、merge()関数のvalidateパラメータに次のように指定することで実現できます。 validate = one_to_one # または validate = 1:1 validateパラメータに1対1を指定すると、マージキーが左右両方のデータセットで一意であるかどうかが検証されます。もし重複したキーが見つかった場合は、MergeErrorが発生してマージ処理が中断されるため、データの整合性を事前にチェックで

  2. Python Pandas入門:DataFrame内のNaN(欠損値)を0に置き換える方法

    PandasのDataFrameに含まれるNaN(欠損値)を0に置き換えるには、fillna()メソッドを使用します。このメソッドは、データクレンジングや前処理の際に非常によく使われる基本的なテクニックです。例として、以下のようなCSVファイル(Microsoft Excelで開いた状態)があるとします。このデータには一部NaN値が含まれています。手順1:必要なライブラリをインポートするまず、Pandasライブラリをインポートします。import pandas as pd手順2:CSVファイルからDataFrameを読み込む次に、read_csv()メソッドを使ってCSVファイルのデータをDa