Pandas не может найти столбцы, ValueError - PullRequest
0 голосов
/ 13 января 2020
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

symbols = ["AAPL", "GLD", "TSLA", "GBL", "GOOGL"]

def compare_security(symbols):
    start_date = "01-01-2019"
    end_date = "01-12-2020"
    dates = pd.date_range(start_date, end_date)

    df1 = pd.DataFrame(index=dates)
    df_SPY = pd.read_csv(
        "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=SPY&apikey=XXXX&datatype=csv",
        index_col="timestamp", usecols=["timestamp", "adjusted_close"], parse_dates=True, na_values=['nan'])
    df_SPY = df_SPY.rename(columns={"adjusted_close": "SPY"})
    df1 = df1.join(df_SPY, how="inner")

    for symbol in symbols:
        df_temp= pd.read_csv("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey=XXXX&datatype=csv".format(symbol),
            index_col = "timestamp", usecols = ["timestamp", "adjusted_close"], parse_dates=True, na_values=['nan'])
        df_temp = df_temp.rename(columns={"adjusted_close":symbol})
        df1 = df1.join(df_temp)
    return df1

def test_run():
    df = compare_security(symbols)
    print(df)
    df.plot()
    plt.title(symbols)
    plt.show()

if __name__ == "__main__":
    test_run()

Это читает ошибку "ValueError: Usecols не соответствуют столбцам, столбцы ожидаются, но не найдены: ['timestamp', 'Adjust_close']"

Однако я проверил все файлы кода будет извлекать, и все они имеют соответствующие столбцы. Будем весьма благодарны за любые разъяснения относительно того, где я ошибся.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Вы превышаете лимит API стандартным ключом. Стандартный ключ допускает 5 вызовов API / минуту и ​​500 / день, поэтому иногда он работает.

Вы можете видеть, что если вы вставите свой URL-адрес в браузер и обновите sh его 5–10 раз за 60 секунд, вы вручную достигнете предела.

Вы можете:

  1. Обновить до премиум-ключа.
  2. Распределить вызовы API (подождите 60 секунд после запуска этого запустить его снова)

Замечание о конфиденциальности, которое также может относиться к достижению вами порогового значения API. Вы публично поделились своим ключом API.

  1. Поместите ключ API в переменную окружения
  2. При публикации используйте "XXXX" или что-то подобное, чтобы заменить ключ API.

Если вы публикуете свой ключ API, его могут использовать другие, и это означает, что кто-то другой может использовать ваши 5 вызовов API в минуту.

Пример:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os

symbols = ["AAPL", "GLD", "TSLA", "GBL", "GOOGL"]


def compare_security(symbols):
    start_date = "01-01-2019"
    end_date = "01-12-2020"
    dates = pd.date_range(start_date, end_date)

    df1 = pd.DataFrame(index=dates)
    df_SPY = pd.read_csv(
        "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=SPY&apikey={}&datatype=csv".format(
            os.getenv("ALPHAVANTAGE_API_KEY")),
        index_col="timestamp", usecols=["timestamp", "adjusted_close"], parse_dates=True, na_values=['nan'])
    df_SPY = df_SPY.rename(columns={"adjusted_close": "SPY"})
    df1 = df1.join(df_SPY, how="inner")

    for symbol in symbols:

        df_temp = pd.read_csv("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey={}&datatype=csv".format(symbol, os.getenv("ALPHAVANTAGE_API_KEY")),
                              index_col="timestamp", usecols=["timestamp", "adjusted_close"], parse_dates=True, na_values=['nan'])
        df_temp = df_temp.rename(columns={"adjusted_close": symbol})
        df1 = df1.join(df_temp)
    return df1


def test_run():
    df = compare_security(symbols)
    print(df)
    df.plot()
    plt.title(symbols)
    plt.show()


if __name__ == "__main__":
    test_run()
0 голосов
/ 13 января 2020

Пожалуйста, выполните следующие команды в IDLE, и вы заметите, что виновником является parse_dates = True. Почему это так? Я не знаю, но, по крайней мере, теперь вы знаете, что является причиной ошибки.

for symbol in symbols:
    df_temp= pd.read_csv("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey=XX3U125BWQLTU2VZ&datatype=csv".format(symbol))
    print(df_temp.columns)

и

for symbol in symbols:
    df_temp= pd.read_csv("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey=XX3U125BWQLTU2VZ&datatype=csv".format(symbol), parse_dates=True)
    print(df_temp.columns)
...