Python dict转给熊猫df

时间:2020-07-14 20:51:32

标签: python pandas for-loop

我有一组可以通过库存数据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数据框行,并将其值和日期作为索引?

数据框看起来像这样吗?

How I want the dataframe to look like

我已经尝试过类似的方法,在其中我将API称为dataToday的字典称为

tickerlist = ['YAR','DNB','NHY']
df = pd.DataFrame(columns=tickerlist)

for ticker in tickerlist:
    df = df.append(pd.DataFrame.from_dict(dataToday[ticker]))

但这给了我一个看起来像这样的数据框:

Dataframe my code creates

我知道这可能是一个愚蠢或简单的问题,所有想法都值得赞赏。谢谢! :)

1 个答案:

答案 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