"ValueError: year is out of range" with IEX Cloud API
"ValueError: year is out of range" with IEX Cloud API
我有一个 CSV(我将其转换为数据框),其中包含 company/stock 数据:
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
函数,其中第二个参数是 date
:df = 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)
注意这是一个public令牌,所以用
没问题
如果将 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'])
当你打电话时 get_historical_data("SBUX", "20190617", close_only=True)
您将日期作为 string.
传递
但是当你使用read_csv读取DataFrame时,这一栏
(包含 8 位字符串)转换为 整数 。
这个差异可能是问题的根源。
尝试两件事:
- 将此列转换为字符串,或
- 读取DataFrame时,传递dtype={'date': str},
以便此列将被读取为字符串。
我有一个 CSV(我将其转换为数据框),其中包含 company/stock 数据:
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
函数,其中第二个参数是 date
:df = 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)
注意这是一个public令牌,所以用
没问题如果将 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'])
当你打电话时 get_historical_data("SBUX", "20190617", close_only=True)
您将日期作为 string.
但是当你使用read_csv读取DataFrame时,这一栏 (包含 8 位字符串)转换为 整数 。
这个差异可能是问题的根源。
尝试两件事:
- 将此列转换为字符串,或
- 读取DataFrame时,传递dtype={'date': str}, 以便此列将被读取为字符串。