pandas

【Pandas】辞書からDataFrameを作成する

pandasのDataFrameを作成する時は、CSVファイルからデータを読み込んだり、リストやndarrayから作成することが多いと思う。

しかしAPI経由で取得したデータの場合、大抵はJSON形式なのでdictに変換してからDataFrameを作成することになる。

辞書からDataFrameを作成する場合、キーを列にするか、インデックスにするかで、少し挙動が変わってくる。

辞書のキーをカラム名としてDataFrame作成

DataFrameとして利用する前提のAPIなどの場合、この形式で良い感じになるようになっている(はず)。

import pandas as pd

dict_data = {
    "key1": "val1",
    "key2": "val2",
    "key3": [1, 2, 3],
    "key4": ["aaa", "bbb", "ccc"]
}
df1 = pd.DataFrame(data=dict_data)
print(df1)
   key1  key2  key3 key4
0  val1  val2     1  aaa
1  val1  val2     2  bbb
2  val1  val2     3  ccc

辞書のキーをカラム名として扱いたい場合、dataに辞書を指定するだけ。

リストになっている値は展開される。

また、リストの長さが異なる場合、エラーとなる。

リスト以外の値についてはブロードキャストされる。

辞書のキーをインデックスとしてDataFrame作成

df2 = pd.DataFrame(data=dict_data.values(), // dataに辞書の値を指定
                   index=dict_data.keys(), // indexに辞書のキーを指定
                   columns=["value"]) // カラム名は適宜指定
print(df2)
                value
key1             val1
key2             val2
key3        [1, 2, 3]
key4  [aaa, bbb, ccc]

この方法だとリストは展開されない(ので使う機会はあまりない)。

通常は、リストが展開される方法でDataFrameを作成し、転置する。

df1_t = df1.transpose()
print(df1_t)
         0     1     2
key1  val1  val1  val1
key2  val2  val2  val2
key3     1     2     3
key4   aaa   bbb   ccc