【问题标题】:Python dict to pandas dfPython dict 到 pandas df
【发布时间】:2020-07-14 20:51:32
【问题描述】:

我有一组可以通过股票数据 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]))

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

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

【问题讨论】:

  • 请使用正确的字典更新您的问题,因为发布的问题格式错误且难以理解。
  • @Jab 这是我请求数据时 API 提供的字典,不幸的是,API 没有给我一个关于如何接收数据的选项。无论如何,我已经通过一些突破更新了我的问题。

标签: python pandas for-loop


【解决方案1】:

您的数据不是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2022-01-14
    • 1970-01-01
    • 2018-02-08
    • 2021-10-06
    • 2018-08-20
    相关资源
    最近更新 更多