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