【Pandas】辞書型配列とデータフレームの変換方法を解説

Pandasのデータフレームと辞書型配列は相互に変換可能で、密接な関係にあります。今回は、辞書型配列をデータフレームに変換する方法と、データフレームを辞書型配列に変換する方法を紹介していきます。

使用するデータ

今回も、ボストンの住宅価格データセットを用いて描画していきます。

import pandas as pd
from sklearn.datasets import load_boston
from datetime import datetime, timedelta

data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)
ボストンの住宅価格データセット

データフレームを辞書型配列に変換

データフレームを辞書型配列に変換するには、to_dict()メソッドを用います。

そのままデータフレームだけを渡すと、

{列名:{行名(インデックス):値}}

という形の辞書が返されます。

dic = df.to_dict()
{列名:{行名(インデックス):値}}の辞書

辞書の形式を指定する(orient)

引数orientを指定することで、変換する辞書の形式を指定することができます。

引数の値形式
dict {列名:{行名:値}}(デフォルト)
list{列名:[ 値 ,…, 値]}
series{列名:Series(値)}
split{index:[ 行名 ], columns:[ 列名 ], data:[ 値 ]}
records [{列名:値}, …, {列名:値}]
index{行名:{列名:値}}

dict

orientを省略した場合のデフォルト値。列名がkey、valueが行名と値の辞書となります。

{列名:{行名:値}}

#orientは省略可
dic = df.to_dict(orient="dict")
{列名:{行名(インデックス):値}}の辞書

list

列名がkey、valueが値の配列となります。行名は情報として含まれません。

{列名:[ 値 ,…, 値]}

df.to_dict(orient="list")
{列名:[ 値 ,..., 値]} の辞書

series

列名がkey、valueがpandasのSeriesとなります。Seriesには行名と値が含まれます。

{列名:Series(値)}

dic_series=df.to_dict(orient="series")
{列名:Series(値)}の辞書

seriesの中身は以下。

Seriesの中身

split

keyが列名、行名、値となり、valueがそれぞれの配列となります。

{index:[ 行名 ], columns:[ 列名 ], data:[ 値 ]}

dic_split=df.to_dict(orient="split")
index:[ 行名 ], columns:[ 列名 ], data:[ 値 ]} の辞書

値(data)のvalueは行ごとに値を格納した二次元配列となります。

dataのvalueは行ごとの二次元配列

records

keyが列ラベル、valueが値の辞書が要素となった配列となります。行名は保持しません。

[{列名:値}, …, {列名:値}]

dic_record=df.to_dict(orient="record")
{列名:値}, ..., {列名:値}] の配列

index

keyが行名、valueが列名と値の辞書となります。

{行名:{列名:値}}

dic_index=df.to_dict(orient="index")
 {行名:{列名:値}} の辞書

辞書型配列をデータフレームに変換

上記、 データフレームを辞書型配列に変換 で出力される辞書(および配列)の形式は、そのままデータフレームに変換することができます。

pd.DataFrame(dic_list)

pd.DataFrame(dic_series)

pd.DataFrame(dic_split)

pd.DataFrame(dic_record)

pd.DataFrame(dic_index)

このとき、値の配列の長さが一致しない場合はエラーとなるので注意してください。

dic={'A': [1,2,3], 'B': [4,5,6,7], 'C': [8,9]}
pd.DataFrame(dic)

ValueError: arrays must all be same length

長さが異なる配列を持つ辞書をデータフレームに変換する際は、以下のようにvalue()メソッドを用います。

df_dic = pd.DataFrame(dic.values(), index=dic.keys()).T

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

初学者の方にはこちらもオススメです^^

まとめ

Pandasのデータフレームと辞書型配列は相互に変換可能で、親和性があります。

辞書でのほうが整理しやすいデータを分析したい場合やExcel、csvファイルで出力したい場合にも使えるので、是非参考にしてみてください^^

ではでは👋