【问题标题】:From list of dict to pandas DataFrame从 dict 列表到 pandas DataFrame
【发布时间】:2019-08-25 11:36:02
【问题描述】:

我正在检索实时财务数据。 每隔 1 秒,我会拉出以下列表:

[{'symbol': 'ETHBTC', 'price': '0.03381600'}, {'symbol': 'LTCBTC', 'price': >'0.01848300'}...]

我们的目标是将此列表放入一个已经存在的 pandas DataFrame 中。

到目前为止,我所做的是将这个字典列表转换为 pandas DataFrame。我的问题是符号和价格在两列中。我想将符号作为 DataFrame 标头,并每 1 秒添加一个包含价格值的新行。

marketInformation = [{'symbol': 'ETHBTC', 'price': '0.03381600'}, {'symbol': 'LTCBTC', 'price': >'0.01848300'}...]

data = pd.DataFrame(marketInformation)
header = data['symbol'].values

newData = pd.DataFrame(columns=header)

while True:
  realTimeData = ... // get a new marketInformation list of dict
  newData.append(pd.DataFrame(realTimeData)['price'])

print(newData)

不幸的是,打印出来的 DataFrame 总是空的。我希望每秒添加一个新行,并为当前时间的每个符号添加新价格。 我打印了以下部分:

pd.DataFrame(realTimeData)['price']

它给了我一个 pandas.core.series.Series 对象,其长度等于符号的数量。

怎么了?

【问题讨论】:

    标签: python-3.x pandas list real-time


    【解决方案1】:

    创建newData 后,只需执行以下操作:

    newData.loc[len(newData), :] = [item['price'] for item in realTimeData]
    

    【讨论】:

    • 标头长度约为 500 个符号。恐怕每秒循环会很慢。
    【解决方案2】:

    你只需要set_index()然后转置df:

    newData = pd.DataFrame(marketInformation).set_index('symbol').T                                                           
    
    #In [245]: newData                                                                                                                   
    #Out[245]: 
    #symbol      ETHBTC         LTC
    #price   0.03381600  0.01848300
    
    # then change the index to whatever makes sense to your data
    newdata_time = pd.Timestamp.now()
    newData.rename(index={'price':newdata_time})
    #Out[246]: 
    #symbol                          ETHBTC         LTC
    #2019-04-03 17:08:51.389359  0.03381600  0.01848300
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2018-06-09
      • 2018-08-11
      • 2018-06-20
      • 1970-01-01
      • 2019-04-18
      • 2021-11-26
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多