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の中身は以下。
split
keyが列名、行名、値となり、valueがそれぞれの配列となります。
{index:[ 行名 ], columns:[ 列名 ], data:[ 値 ]}
dic_split=df.to_dict(orient="split")
値(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ファイルで出力したい場合にも使えるので、是非参考にしてみてください^^
ではでは👋