Pandas DataFrame・SeriesをPython辞書に変換!to_dict()を使いこなす 📚
Pandasでデータ分析を行った後、その結果をPython標準の**辞書(Dictionary)**形式で扱いたい、あるいはWeb APIへのデータ送信や設定ファイルの生成など、辞書形式が求められる場面は多々あります。PandasのDataFrameやSeriesには、このニーズに応える便利なto_dict()メソッドが用意されています。
この記事では、DataFrameとSeriesをそれぞれ辞書に変換する基本的な方法から、特にDataFrameで重要となる出力形式の指定(orientオプション)までを詳しく解説します。
Pandas Seriesを辞書に変換 (.to_dict()) 🔑
Seriesは1次元データ構造なので、辞書への変換は比較的シンプルです。Seriesのインデックスが辞書のキーに、値が辞書の値になります。
import pandas as pd
# サンプルSeriesを作成
s = pd.Series([100, 200, 300], index=['Apple', 'Banana', 'Orange'], name='Price')
# Seriesを辞書に変換
s_dict = s.to_dict()
print("--- Seriesを辞書に変換 ---")
print(s_dict)
# 出力例: {'Apple': 100, 'Banana': 200, 'Orange': 300}
Pandas DataFrameを辞書に変換 (.to_dict()):orientが鍵 🗝️
DataFrameは2次元データ構造なので、辞書への変換方法にはいくつかのパターンがあります。これを制御するのがorientオプションです。
基本的な使い方とorientオプション
orientオプションは、DataFrameの行と列をどのように辞書のキーと値にマッピングするかを指定します。
-
orient=’dict’ (デフォルト):
辞書の辞書形式で、列名を外側のキー、インデックスを内側のキーとします。
Pythonimport pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print("--- orient='dict' (デフォルト) ---") print(df.to_dict(orient='dict')) # 出力例: {'A': {0: 1, 1: 2}, 'B': {0: 3, 1: 4}} -
orient=’list’:
辞書の辞書形式で、列名を外側のキー、値をリストとします(インデックスは失われます)。
Pythonimport pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print("\n--- orient='list' ---") print(df.to_dict(orient='list')) # 出力例: {'A': [1, 2], 'B': [3, 4]} -
orient=’series’:
辞書の辞書形式で、列名を外側のキー、値をSeriesオブジェクトとします。
Pythonimport pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print("\n--- orient='series' ---") print(df.to_dict(orient='series')) # 出力例: {'A': 0 1\n1 2\nName: A, dtype: int64, 'B': 0 3\n1 4\nName: B, dtype: int64} -
orient=’records’:
行を辞書として、その辞書のリストとして出力します。Web APIでJSONデータを送信する際によく使われる形式です。
Pythonimport pandas as pd df = pd.DataFrame({ 'ID': [101, 102], 'Name': ['Alice', 'Bob'] }) print("\n--- orient='records' (最も一般的) ---") print(df.to_dict(orient='records')) # 出力例: [{'ID': 101, 'Name': 'Alice'}, {'ID': 102, 'Name': 'Bob'}] -
orient=’index’:
辞書の辞書形式で、インデックスを外側のキー、列名を内側のキーとします。
Pythonimport pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print("\n--- orient='index' ---") print(df.to_dict(orient='index')) # 出力例: {0: {'A': 1, 'B': 3}, 1: {'A': 2, 'B': 4}} -
orient=’split’:
index、columns、dataの3つのキーを持つ辞書として出力します。
Pythonimport pandas as pd df = pd.DataFrame({ 'A': [1, 2], 'B': [3, 4] }) print("\n--- orient='split' ---") print(df.to_dict(orient='split')) # 出力例: {'index': [0, 1], 'columns': ['A', 'B'], 'data': [[1, 3], [2, 4]]}
よく使うorientの選び方
-
'records': 各行を個別のレコードとして扱いたい場合(Web APIへの送信など)に最も推奨されます。 -
'list': 各列のデータを単純なリストとして取得したい場合。 -
'dict': デフォルトの挙動で、ネストされた構造を保持したい場合。
まとめ
Pandasのto_dict()メソッドは、DataFrameやSeriesのデータをPythonの辞書形式に柔軟に変換するための強力なツールです。
-
Seriesを辞書に:s.to_dict() -
DataFrameを辞書に:df.to_dict(orient='...')
特にDataFrameの場合、orientオプションを適切に選択することで、目的の辞書構造を簡単に生成できます。データのエクスポート、API連携、設定ファイルの作成など、様々な場面でこの機能を活用し、データ処理の幅を広げましょう!

