Сообщение об ошибке при добавлении данных в pandas dataframe - PullRequest
0 голосов
/ 02 октября 2019

Может кто-нибудь помочь мне с этим:

Я создал цикл для добавления последовательных интервалов исторических данных о ценах из Coinbase.

Мой цикл успешно повторяется несколько раз, а затем завершается сбоем.

Сообщение об ошибке (в строке кода data_temp):

"ValueError: При использовании всех скалярных значений необходимо передать индекс"

days = 10
end = datetime.now().replace(microsecond=0)
start = end - timedelta(days=days)
data_price = pd.DataFrame()

for i in range(1,50):
    print(start)
    print(end)
    data_temp = pd.DataFrame(public_client.get_product_historic_rates(product_id='BTC-USD', granularity=3600, start=start, end=end))
    data_price = data_price.append(data_temp)
    end = start
    start = end - timedelta(days=days)

Хотелось бы понять, какисправьте это и почему это происходит в первую очередь.

Спасибо!

Вот полный след:

Traceback (последний последний вызов): Файл "\ coinbase_bot.py ", строка 46, в data_temp = pd.DataFrame (public_client.get_product_historic_rates (product_id = 'BTC-USD', гранулярность = 3600, начало = начало, конец = конец)) Файл" D: \ Program Files \ Python37 \ lib\ site-packages \ pandas \ core \ frame.py ", строка 411, в init mgr = init_dict (данные, индекс, столбцы, dtype = dtype) Файл" D: \ Program Files \ Python37 \ lib\ site-packages \ pandas \ core \ internals \ construction.py ", строка 257, в возвращаемом массиве init_dicts_to_mgr (массивы, имена-данных, индекс, столбцы, dtype = dtype) Файл "D: \ Program Files \ Python37 \ lib \ site-packages \ pandas \ core \ internals \ construction.py", строка 77, в arrays_to_mgr index = extract_index (массивы) Файл "D: \ Program Files \ Python37 \ lib \ site-packages \ pandas \ core \ internals \ construction.py", строка 358, в extract_index повысить ValueError ("Если вы используете все скалярные значения, вы должны передать индекс") ValueError: Если вы используете все скалярные значения, вы должны передать индекс

Вот json, возвращенный с помощью простого URL-вызова:

[[1454716800,370.05,384.54,384.44,375.44,6276.66473729], [1454630400,382.99,389.36,387.99,384.5,7443.92933224], [1454544000,368.74,390.63,368.87,387.99,8887.7572324], [1454457600,365.63,373.01,372.93,368.87,7147.95657328], [1454371200,371.17,374.41,371.33,372.93,6856.21815799], [1454284800,366.26,379,367.89,371.33,7931.22922922], [1454198400,365,382.5,378.46,367.95,5506.77681302]]

Очень похоже на проблему этого пользователя, но не может поставить ее в тупик:1026 * при попытке тo объединить несколько фреймов данных, как разрешить «ValueError: Если вы используете все скалярные значения, вы должны передать индекс»

1 Ответ

0 голосов
/ 02 октября 2019

- Привет DashOfProgramming,

Ваша проблема в том, что data_temp инициализируется только с одной строкой, и панды требуют, чтобы вы предоставили ему индекс для этого.

Следующий фрагмент должен решить эту проблему. Я заменил ваш вызов API на простой словарь, который напоминает то, что я ожидал бы от возврата API, и использовал i в качестве индекса для фрейма данных (это имеет то преимущество, что вы также можете отслеживать):

import pandas as pd
from datetime import datetime, timedelta

days = 10
end = datetime.now().replace(microsecond=0)
start = end - timedelta(days=days)
data_price = pd.DataFrame()

temp_dict = {'start': '2019-09-30', 'end': '2019-10-01', 'price': '-111.0928', 
'currency': 'USD'}

for i in range(1,50):
  print(start)
  print(end)
  data_temp = pd.DataFrame(temp_dict, index=[i])
  data_price = data_price.append(data_temp)
  end = start
  start = end - timedelta(days=days)

print(data_price)

РЕДАКТИРОВАТЬ

Только что увидел, что ваш вывод API представляет собой вложенный список. pd.DataFrame () считает, что список - это только одна строка, потому что он вложенный. Я предлагаю вам сохранить ваши столбцы в отдельной переменной, а затем сделать это:

cols = ['ts', 'low', 'high', 'open', 'close', 'sth_else']

v = [[...], [...], [...]] # your list of lists

data_temp = pd.DataFrame.from_records(v, columns=cols)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...