【问题标题】:"ValueError: year is out of range" with IEX Cloud APIIEX Cloud API 的“ValueError:年份超出范围”
【发布时间】:2020-03-27 09:02:36
【问题描述】:

我有一个包含公司/股票数据的 CSV(我将其转换为数据框):

  Symbol  Quantity  Price  Cost      date
0    DIS         9    NaN    20  20180531
1   SBUX         5    NaN    30  20180228
2   PLOW         4    NaN    40  20180731
3   SBUX         2    NaN    50  20191130
4    DIS        11    NaN    25  20171031

我正在尝试使用 IEX Cloud API 为给定的 date 提取库存 Price。然后最终将其写入数据帧。根据IEX Cloud API documentation,我可以使用get_historical_data 函数,其中第二个参数是datedf = get_historical_data("SBUX", "20190617", close_only=True)

只要我将原始日期直接传递给函数(例如,20190617),一切正常,但如果我尝试使用变量,我会得到ValueError: year 20180531 is out of range。我猜我原始 CSV 中的 date 格式有问题?

这是我的完整代码:

import os
from iexfinance.stocks import get_historical_data
import pandas as pd

os.environ['IEX_API_VERSION'] = 'iexcloud-sandbox'
os.environ['IEX_TOKEN'] = 'Tsk_5798c0ab124d49639bb1575b322841c4'

input_df = pd.read_csv("all.csv")

for index, row in input_df.iterrows():
    symbol = row['Symbol']
    date = row['date']
    temp_df = get_historical_data(symbol, date, close_only=True, output_format='pandas')
    price = temp_df['close'].values[0]

    print(temp_df)

注意,这是一个公共令牌,所以可以使用

【问题讨论】:

    标签: python pandas api dataframe valueerror


    【解决方案1】:

    当你打电话给get_historical_data("SBUX", "20190617", close_only=True) 您将日期作为字符串传递。

    但是当您使用 read_csv 读取 DataFrame 时,此列 (包含 8 位字符串)转换为 整数

    这种差异可能是问题的根源。

    尝试两件事:

    • 将此列转换为字符串,或
    • 在读取 DataFrame 时,传递 dtype={'date': str}, 以便将此列作为字符串读取。

    【讨论】:

      【解决方案2】:

      如果您将date 行转换为datetime,应该没问题。

      import pandas as pd
      
      df = pd.DataFrame(['20180531'])
      
      pd.to_datetime(df.values[:, 0])
      
      Out[43]: DatetimeIndex(['2018-05-31'], dtype='datetime64[ns]', freq=None)
      

      然后,您的列将被正确格式化,以便在其他地方使用。你可以在pd.read_csv()下面插入这一行:

      df['date'] = pd.to_datetime(df['date'])
      

      【讨论】:

      • 当我执行input_df['date'] = pd.to_datetime(input_df['date']) 并打印结果时,我得到类似:1970-01-01 00:00:00.020180412,这似乎不正确?
      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 2023-03-12
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多