Pythonで既存のPandas DataFrameに辞書のリストを追加する方法
Pandasでは、辞書のリストを既存のDataFrameに追加することで、複数の行データをまとめて結合できます。かつては append() メソッドがよく使われていましたが、このメソッドはPandas 1.4で非推奨となり、2.0で削除されました。現在は pd.concat() を使うのが標準的な方法です。本記事では、両方のアプローチを含めて手順を解説します。
1. 元となるDataFrameを作成する
まず、車種・地域・販売台数を含む基本的なDataFrameを作成します。
import pandas as pd
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'XUV', 'Lexus', 'Volkswagen'],
"Place": ['Delhi', 'Bangalore', 'Pune', 'Chandigarh', 'Mumbai'],
"Units": [100, 150, 50, 110, 90]
}
)
print("DataFrame ...\n", dataFrame)
2. 追加する辞書のリストを作成する
次に、DataFrameに追加したい行データを辞書のリストとして定義します。各辞書のキーは、既存のDataFrameの列名と対応させておくのがポイントです。
d = [
{'Car': 'Mustang', 'Place': 'Hyderabad', 'Units': 60},
{'Car': 'Tesla', 'Place': 'Kerala', 'Units': 30},
{'Car': 'RollsRoyce', 'Place': 'Punjab', 'Units': 70},
{'Car': 'Bentley', 'Place': 'Gujarat', 'Units': 80}
]
print("\nDictionary....\n", d)
3. 辞書のリストをDataFrameに追加する
旧バージョン(Pandas 1.3以前)の書き方
以前は append() を使って以下のように記述していました。ただし、このメソッドは現在利用できませんので注意してください。
# ※非推奨:Pandas 2.0以降では削除済み
dataFrame = dataFrame.append(d, ignore_index=True, sort=False)
現行バージョンでの推奨される書き方(pd.concat)
現在のPandasでは、辞書のリストから一時的なDataFrameを作成し、pd.concat() で連結するのが推奨される方法です。
dataFrame = pd.concat([dataFrame, pd.DataFrame(d)], ignore_index=True)
ignore_index=True を指定すると、連結後のインデックスが0から振り直されます。これを指定しないとインデックスが重複してしまうため、通常は指定しておくのが安全です。
完全なサンプルコード
import pandas as pd
# 元となるDataFrameを作成
dataFrame = pd.DataFrame(
{
"Car": ['BMW', 'Audi', 'XUV', 'Lexus', 'Volkswagen'],
"Place": ['Delhi', 'Bangalore', 'Pune', 'Chandigarh', 'Mumbai'],
"Units": [100, 150, 50, 110, 90]
}
)
print("DataFrame ...\n", dataFrame)
# 追加用の辞書のリストを作成
d = [
{'Car': 'Mustang', 'Place': 'Hyderabad', 'Units': 60},
{'Car': 'Tesla', 'Place': 'Kerala', 'Units': 30},
{'Car': 'RollsRoyce', 'Place': 'Punjab', 'Units': 70},
{'Car': 'Bentley', 'Place': 'Gujarat', 'Units': 80}
]
print("\nDictionary....\n", d)
# 辞書のリストを既存のDataFrameに連結
dataFrame = pd.concat([dataFrame, pd.DataFrame(d)], ignore_index=True)
# 結果を表示
print("\nResult of concat...\n", dataFrame)
実行結果
上記のコードを実行すると、次のような出力が得られます。
DataFrame ...
Car Place Units
0 BMW Delhi 100
1 Audi Bangalore 150
2 XUV Pune 50
3 Lexus Chandigarh 110
4 Volkswagen Mumbai 90
Dictionary....
[{'Car': 'Mustang', 'Place': 'Hyderabad', 'Units': 60}, {'Car': 'Tesla', 'Place': 'Kerala', 'Units': 30}, {'Car': 'RollsRoyce', 'Place': 'Punjab', 'Units': 70}, {'Car': 'Bentley', 'Place': 'Gujarat', 'Units': 80}]
Result of concat...
Car Place Units
0 BMW Delhi 100
1 Audi Bangalore 150
2 XUV Pune 50
3 Lexus Chandigarh 110
4 Volkswagen Mumbai 90
5 Mustang Hyderabad 60
6 Tesla Kerala 30
7 RollsRoyce Punjab 70
8 Bentley Gujarat 80
補足:知っておくと便利なポイント
- 列名が一致しない場合: 辞書のキーが既存のDataFrameの列名と一致しない場合でもエラーにはなりませんが、その部分は欠損値(NaN)として埋められます。
- パフォーマンスについて: ループ内でDataFrameへの追加を繰り返すのは非効率です。可能であれば、すべてのデータをリストに集めてから一度だけ
pd.concat()を呼び出すようにしましょう。 - sort引数について: 旧
append()のsort=Falseは列の並び順を維持するためのものでした。pd.concat()ではデフォルトで最初のDataFrameの列順が保持されます。
このように、辞書のリストを活用すれば、構造化された新規データを既存のDataFrameへ柔軟に追加できます。環境によっては append() のコード例がまだ多く見られますが、今後の開発では pd.concat() を使うようにしましょう。
-
【Python】Pandas DataFrameからサブセット(列の一部)を選択する方法
Pandas DataFrameのサブセット選択とは? Pandasでは、DataFrameから必要な列や行だけを取り出す操作を「サブセットの選択」と呼びます。大きなデータセットから目的のデータだけを抽出できれば、分析や前処理の効率が大幅に向上します。 この記事では、CSVファイルを読み込んだDataFrameから、1つの列、および複数の列を選択する基本的な方法を解説します。 使用するCSVファイルの内容 今回使用する「SalesData.csv」は、Microsoft Excelで開くと以下のような内容になっています。 CSVファイルからDataFrameを作成する まず、pd.rea
-
Pandasで既存のDataFrameに新しい列を追加する3つの方法
はじめにこのチュートリアルでは、Pythonのデータ分析ライブラリ「pandas」において、既存のDataFrameに新しい列を追加する方法を解説します。新しい列を追加するアプローチは複数あり、それぞれに特徴があります。ここでは代表的な3つの方法を、コード例と実行結果とともに順番に見ていきましょう。方法1:リストを使って追加する最もシンプルなのが、Pythonのリストをそのまま列として代入する方法です。以下の手順で行います。手順辞書を使ってDataFrameを作成する。新しい列のデータを含むリストを作成する。リストの長さが、すでにDataFrame内にあるデータの行数と一致している必要がある点