Из списка продиктованных панд DataFrame - PullRequest
0 голосов
/ 03 апреля 2019

Я получаю финансовые данные в режиме реального времени. Каждую 1 секунду я вытягиваю следующий список:

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

Цель состоит в том, чтобы поместить этот список в уже существующий пандас DataFrame.

То, что я до сих пор делал, - это преобразование этого списка словаря в панду 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 голосов
/ 04 апреля 2019

Вам просто нужно 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
0 голосов
/ 03 апреля 2019

После создания newData просто выполните:

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