将词典列表转换为pandas数据帧

时间:2018-01-11 21:27:03

标签: python pandas

我有一个股票代码和日期的字典列表,如下所示。我想制作一个大熊猫数据框,左边有自动收报机,顶部是日期。我怎样才能做到这一点?

[{'GOOG': [{'01-10-2018': '0.08388400'}, {'01-11-2018': '0.08787100'}]}, 
{'AAPL': [{'01-10-2018': '0.01660500'}, {'01-11-2018': '0.01715700'}]}]

1 个答案:

答案 0 :(得分:1)

您需要将输入数据重塑为更加友好的pandas内容。这是一种方式:

import pandas as pd

# sample data
l = [
    {'GOOG': [{'01-10-2018': '0.08388400'}, {'01-11-2018': '0.08787100'}]}, 
    {'AAPL': [{'01-10-2018': '0.01660500'}, {'01-11-2018': '0.01715700'}]}
]

# make it into a dictionary (assumes that your symbols are distinct)
temp_d = {ticker: d[ticker] for d in l for ticker in d}

# combine the inner dictionaries, keyed by date
final_d = {
    ticker: {date:x[date] for x in temp_d[ticker] for date in x} for ticker in temp_d
}


# make it into a dataframe
df = pd.DataFrame.from_dict(final_d, orient='index')

输出:

>>> print(df)

      01-10-2018  01-11-2018
AAPL  0.01660500  0.01715700
GOOG  0.08388400  0.08787100

供参考,以下是temp_dfinal_d的样子:

>>> print(temp_d)

{'AAPL': [{'01-10-2018': '0.01660500'}, {'01-11-2018': '0.01715700'}],
 'GOOG': [{'01-10-2018': '0.08388400'}, {'01-11-2018': '0.08787100'}]}

>>> print(final_d)

{'AAPL': {'01-10-2018': '0.01660500', '01-11-2018': '0.01715700'},
 'GOOG': {'01-10-2018': '0.08388400', '01-11-2018': '0.08787100'}}

还有其他方法可以做到这一点,但主要是重新格式化您的输入,以便它与许多 pandas构造函数之一兼容。

<强>更新

基于@Evan对OP的评论,更明智(可能)的方法是将代码作为列,将日期作为行。如果你改变主意并希望以这种方式改变,那么这只是一个简单的参数改变:

df = pd.DataFrame.from_dict(final_d, orient='columns')

打印为:

                  AAPL        GOOG
01-10-2018  0.01660500  0.08388400
01-11-2018  0.01715700  0.08787100