我有一组可以通过库存数据API来获取的数据,数据量以及库存的方式取决于用户的要求。我从API收到的数据以字典的形式出现。
示例:
{'YAR': last
date
2020-07-10 336.4
2020-07-13 344.0
2020-07-14 344.3,
'DNB': last
date
2020-07-10 129.60
2020-07-13 142.45
2020-07-14 145.50,
'NHY': last
date
2020-07-10 27.35
2020-07-13 28.56
2020-07-14 28.50}
是否可以在Python中编写一个for循环,从而为字典中的每个键创建一个新的pandas数据框行,并将其值和日期作为索引?
数据框看起来像这样吗?
我已经尝试过类似的方法,在其中我将API称为dataToday的字典称为
tickerlist = ['YAR','DNB','NHY']
df = pd.DataFrame(columns=tickerlist)
for ticker in tickerlist:
df = df.append(pd.DataFrame.from_dict(dataToday[ticker]))
但这给了我一个看起来像这样的数据框:
我知道这可能是一个愚蠢或简单的问题,所有想法都值得赞赏。谢谢! :)
答案 0 :(得分:2)
您的数据不是json / dict,我认为数据就像
data_as_dict = {
'YAR': { 'date' : [ '2020-07-10', '2020-07-13', '2020-07-14'], 'last' : [336.4, 344.0, 344.3] },
'DNB': { 'date' : [ '2020-07-10', '2020-07-13', '2020-07-14'], 'last' : [129.60, 142.45, 145.50] },
'NHY': { 'date' : [ '2020-07-10', '2020-07-13', '2020-07-14'], 'last' : [27.35, 28.56, 28.50] }
}
比
import pandas as pd
list_of_sub_dfs = []
for stock_dict in data_as_dict:
sub_class = pd.DataFrame.from_dict(data_as_dict[stock_dict], orient="columns")
sub_class.set_index('date')
sub_class.columns = [stock_dict]
list_of_sub_dfs.append(sub_class)
这可能更漂亮,没有循环,但是想不出一种明显的方法。
例如使用。
pd.concat(list_of_sub_dfs,axis=1)
将它们连接到:
YAR DNB NHY
date
2020-07-10 336.4 129.60 27.35
2020-07-13 344.0 142.45 28.56
2020-07-14 344.3 145.50 28.50