从字典列表到熊猫DataFrame

时间:2019-04-03 20:18:24

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

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

  

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

目标是将此列表放入已存在的熊猫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对象,其长度等于符号的数量。

怎么了?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您只需要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
相关问题