はじめに
この記事では、PandasのDataFrameを辞書に変換する方法について説明します。
to_dictメソッド
PandasのDataFrameを辞書に変換するための主要な方法は、to_dict()
関数です。この関数の構文は次のようになります:
dataframe.to_dict(orient='dict', into=dict)
このメソッドは、orient
やinto
パラメータを使用することで、柔軟な出力形式をに対応します。
Orient
orient
パラメータとその可能な値について説明します。
dict
orient
パラメータをdict
に設定すると、外側の辞書のキーが列名を表し、内側の辞書に対応するデータが含まれる辞書の形式の辞書が作成されます。
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
result = df.to_dict(orient='dict')
print(result)
{'A': {0: 1, 1: 2, 2: 3}, 'B': {0: 4, 1: 5, 2: 6}}
list
orient
をlist
に設定すると、生成される辞書には列名がキーで、列データが値のリストとして含まれます。
result = df.to_dict(orient='list')
print(result)
{'A': [1, 2, 3], 'B': [4, 5, 6]}
series
orient
をseries
に設定すると、出力はPandas Seriesオブジェクトの辞書であり、キーが列名に対応します。
result = df.to_dict(orient='series')
print(result)
{'A': 0 1
1 2
2 3
Name: A, dtype: int64, 'B': 0 4
1 5
2 6
Name: B, dtype: int64}
split
split
オリエンテーションは、3つのキーindex
、columns
、およびdata
を持つ辞書を生成します。これらのキーの値は、それぞれインデックスラベル、列名、およびデータ値です。
result = df.to_dict(orient='split')
print(result)
{'index': [0, 1, 2], 'columns': ['A', 'B'], 'data': [[1, 4], [2, 5], [3, 6]]}
records
orient
をrecords
に設定すると、出力はDataFrameの各行を表す辞書のリストであり、各辞書のキーが列名に対応します。
result = df.to_dict(orient='records')
print(result)
[{'A': 1, 'B': 4}, {'A': 2, 'B': 5}, {'A': 3, 'B': 6}]
index
orient
パラメータをindex
に設定すると、外側の辞書のキーがインデックスラベルを表し、内側の辞書に対応するデータが含まれる辞書が作成されます。
result = df.to_dict(orient='index')
print(result)
{0: {'A': 1, 'B': 4}, 1: {'A': 2, 'B': 5}, 2: {'A': 3, 'B': 6}}
DataFrameをOrderedDictに変換
デフォルトでは、to_dict()
関数は標準のPython辞書を返します。ただし、into
パラメータをcollections.OrderedDict
に設定することで、DataFrameをOrderedDictに変換することもできます。OrderedDictは、辞書内のキーの順序を維持するため、特定のシナリオで役立つ場合があります。
orient
パラメータをdict
に設定して、DataFrameをOrderedDictに変換する例を見てみます。
import pandas as pd
from collections import OrderedDict
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
result = df.to_dict(orient='dict', into=OrderedDict)
print(result)
OrderedDict([('A', {0: 1, 1: 2, 2: 3}), ('B', {0: 4, 1: 5, 2: 6})])
出力結果は、列名('A'と'B')がキーで、対応するデータが内側の辞書として含まれるOrderedDictです。キーの順序はOrderedDictで保持されます。
orient
の他の値を使用してDataFrameをOrderedDictに変換することもできます。例えば、orient
をrecords
に設定してDataFrameをOrderedDictに変換することができます。
result = df.to_dict(orient='records', into=OrderedDict)
print(result)
[OrderedDict([('A', 1), ('B', 4)]), OrderedDict([('A', 2), ('B', 5)]), OrderedDict([('A', 3), ('B', 6)])]
この場合、出力は、各辞書がDataFrameの1行を表し、キーの順序が辞書内で保持されているOrderedDictのリストです。