Python IEX云API的“ValueError:年份超出范围”

Python IEX云API的“ValueError:年份超出范围”,python,pandas,api,dataframe,valueerror,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

我有一个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云API来获取给定日期的股票价格。然后最终将其写入数据帧。根据,我可以使用get_historical_data函数,其中第二个参数是日期:df=get_historical_dataSBUX,20190617,close_only=True

只要我将原始日期直接传递给函数(如20190617),一切都正常,但如果我尝试使用变量,我会得到ValueError:年份20180531超出范围。我猜我的原始CSV中的日期格式有问题

这是我的全部代码:

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)

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

如果您将日期行转换为datetime,则应该没有问题

作为pd进口熊猫 df=pd.DataFrame['20180531'] pd.to_datetimedf.values[:,0] 然后,您的列将正确格式化,以便在其他地方使用。您可以在pd.read\u csv下面插入此行:

调用get_historical_dataSBUX,20190617时,close_only=True 您以字符串形式传递了日期

但当您使用read_csv读取数据帧时,此列 包含8位字符串的字符串转换为整数

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

尝试两件事:

将此列转换为字符串,或 读取数据帧时,传递dtype={'date':str}, 因此,此列将作为字符串读取。 当我输入_df['date']=pd.到_datetime输入_df['date']并打印结果时,我得到的结果是:1970-01-01 00:00:00.020180412,这似乎不正确?
Out[43]: DatetimeIndex(['2018-05-31'], dtype='datetime64[ns]', freq=None)
df['date'] = pd.to_datetime(df['date'])