0
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','adjusted_close']”

但是,我检查了代码将检索的所有文件,它们都有各自的列。任何关于我哪里出错的澄清将不胜感激。

4

2 回答 2

0

您正在使用标准密钥达到 API 限制。标准密钥允许 5 API 调用 / 分钟和 500 / 天,这就是它有时工作的原因。

您可以看到,如果您将 URL 粘贴到浏览器中并在 60 秒内刷新 5 到 10 次,您将手动达到限制。

您可以:

  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()
于 2020-01-13T21:20:58.903 回答
-1

请在 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)
于 2020-01-13T18:39:42.577 回答