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

【Pandas】共通の列をキーにデータフレームをマージし、一致しない値はNaNにする方法

2つのPandasデータフレームを共通の列(キー)で結合(マージ)するには、merge()関数を使用し、onパラメータに共通の列名を指定します。さらに、一致しない値に対してNaNを設定したい場合は、howパラメータに'left'(左結合)または'right'(右結合)を指定します。

merge()関数のポイント

  • on:結合のキーとなる共通の列名を指定します。
  • how:結合方法を指定します。'left'は左側のデータフレームの行をすべて残し、'right'は右側の行をすべて残します。相手側に一致する値がない場合はNaNで埋められます。

なお、デフォルトの'inner'(内部結合)では一致しない行が削除されるため、NaNを残したい場合は'left'・'right'、あるいは両方の行を保持する'outer'を指定します。

準備:Pandasのインポート

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

import pandas as pd

DataFrame1の作成

車種(Car)と販売台数(Units)を含むデータフレームを作成します。

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

DataFrame2の作成

車種(Car)と登録価格(Reg_Price)を含むデータフレームを作成します。

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

共通の列「Car」でマージする

how='left'を指定してマージすると、左側のデータフレーム(DataFrame1)のすべての行が保持されます。このとき、右側のデータフレーム(DataFrame2)に存在しない車種(AudiとBentley)のReg_Priceには自動的に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 ...')
print(dataFrame1)

# DataFrame2を作成
dataFrame2 = pd.DataFrame(
    {
        'Car': ['BMW', 'Lexus', 'Tesla', 'Mustang', 'Mercedes', 'Jaguar'],
        'Reg_Price': [7000, 1500, 5000, 8000, 9000, 6000]
    }
)
print('\nDataFrame2 ...')
print(dataFrame2)

# 共通の列Carでマージ(how='left'により、一致しない値はNaNになる)
mergedRes = pd.merge(dataFrame1, dataFrame2, on='Car', how='left')
print('\n共通の列でマージしたデータフレーム ...')
print(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

まとめ

pd.merge()のonパラメータで共通の列を指定し、howパラメータに'left'または'right'を設定することで、片側のデータフレームの行をすべて保持しながら結合できます。一致しない値はNaNとして残るため、後続の処理でdropna()やfillna()などを使って柔軟に対応できます。

  1. Matplotlibを使ってPandasデータフレームの折れ線グラフをプロットする方法

    Pandasのデータフレームから折れ線グラフを描画するには、plot()メソッドとMatplotlibを組み合わせて使用します。この記事では、実際のコード例を通じて、データフレームの2つの列(登録価格と販売台数)の関係を折れ線グラフとして可視化する手順を解説します。 1. 必要なライブラリをインポートする まず、データ操作用のpandasと、グラフ描画用のmatplotlib.pyplotをインポートします。 import pandas as pd import matplotlib.pyplot as plt 2. データフレームを作成する 次に、車種名・登録価格・販売台数の3列を持つサンプ

  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