IEX Cloud API“ ValueError:年份超出范围”

时间:2019-12-02 17:47:27

标签: python pandas api dataframe valueerror

我有一个由公司/股票数据组成的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来获取给定Price的股票date。然后最终将其写入数据框。对于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)

请注意,这是一个公共令牌,因此可以使用

2 个答案:

答案 0 :(得分:1)

当您致电get_historical_data("SBUX", "20190617", close_only=True)时 您以字符串的形式传递了日期。

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

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

尝试两件事:

  • 将此列转换为字符串,或者
  • 在读取DataFrame时,传递 dtype = {'date':str} , 这样该列将被读取为字符串。

答案 1 :(得分:0)

如果将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'])