我有一个股票代码和日期的字典列表,如下所示。我想制作一个大熊猫数据框,左边有自动收报机,顶部是日期。我怎样才能做到这一点?
[{'GOOG': [{'01-10-2018': '0.08388400'}, {'01-11-2018': '0.08787100'}]},
{'AAPL': [{'01-10-2018': '0.01660500'}, {'01-11-2018': '0.01715700'}]}]
答案 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_d
和final_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