Значение индекса данных в Panda как объект вместо datetime - PullRequest
0 голосов
/ 02 сентября 2018

Я скачал некоторые данные о цене акций через API (из Alphavantage):

response = requests.get("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=XXX") data = response.json() df = pd.DataFrame.from_dict(data["Time Series (Daily)"], orient='index')

и преобразованные столбцы в числовые (df.apply (pd.to_numeric))

Это вывод в Jupyter - очень стандартная матрица дат и цен на акции.

Я не могу понять, как манипулировать данными (например, умножить df.loc[df['1. open'] > 93, '1. open'] *= 2), что обычно легко. Я думаю, что с данными индекса что-то не так. Я попытался df.index = pd.to_datetime(df.index), чтобы получить его в формате timedate, а также попытался переименовать индекс. Кроме того, столбец индекса не загружается, если я пытаюсь переместить фрейм данных в файл CSV.

Я думаю, проблема в том, что данные индекса по-прежнему являются строками, но я не понимаю, почему они не становятся датой-временем с кодом выше.

Я получаю сообщение об ошибке («>» не поддерживается между экземплярами «str» и «int»), но решения по другим вопросам также не работают.

Извините за мой длинный вопрос и большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 02 сентября 2018

Имя столбца не 'open', а '1. open'. (Изменить: Хорошо, вопрос был отредактирован, чтобы позаботиться об этом, но там все еще остается 'open'.)

Если изменить это, ваш пример завершится с ошибкой

TypeError: '>' не поддерживается между экземплярами 'str' и 'int'

, который указывает, что столбцы содержат не числа, а строки (которые вы также можете найти с помощью df.info()). Вы можете позаботиться об этом, используя df.astype(float) или указав нужные типы при создании DataFrame, эффективно используя pd.DataFrame.from_dict(data['Time Series (Daily)'], orient='index', dtype=float).

В первом случае

df = df.astype(float)
df.loc[df['1. open'] > 93, '1. open'] *= 2

достиг бы того, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...