【Pandas】日付インデックスの頻度を判定する
MAX
MAX999blog
pandasのDataFrameを作成する時は、CSVファイルからデータを読み込んだり、リストやndarrayから作成することが多いと思う。
しかしAPI経由で取得したデータの場合、大抵はJSON形式なのでdictに変換してからDataFrameを作成することになる。
辞書からDataFrameを作成する場合、キーを列にするか、インデックスにするかで、少し挙動が変わってくる。
DataFrameとして利用する前提のAPIなどの場合、この形式で良い感じになるようになっている(はず)。
1import pandas as pd
2
3dict_data = {
4 "key1": "val1",
5 "key2": "val2",
6 "key3": [1, 2, 3],
7 "key4": ["aaa", "bbb", "ccc"]
8}
9df1 = pd.DataFrame(data=dict_data)
10print(df1)
11# key1 key2 key3 key4
12# 0 val1 val2 1 aaa
13# 1 val1 val2 2 bbb
14# 2 val1 val2 3 ccc
辞書のキーをカラム名として扱いたい場合、dataに辞書を指定するだけ。
リストになっている値は展開される。
また、リストの長さが異なる場合、エラーとなる。
リスト以外の値についてはブロードキャストされる。
1df2 = pd.DataFrame(data=dict_data.values(), // dataに辞書の値を指定
2 index=dict_data.keys(), // indexに辞書のキーを指定
3 columns=["value"]) // カラム名は適宜指定
4print(df2)
5# value
6# key1 val1
7# key2 val2
8# key3 [1, 2, 3]
9# key4 [aaa, bbb, ccc]
この方法だとリストは展開されない(ので使う機会はあまりない)。
通常は、リストが展開される方法でDataFrameを作成し、転置する。
1df1_t = df1.transpose()
2print(df1_t)
3# 0 1 2
4# key1 val1 val1 val1
5# key2 val2 val2 val2
6# key3 1 2 3
7# key4 aaa bbb ccc