我有一个由公司/股票数据组成的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为给定的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)
注意这是一个公共令牌,所以可以使用
当你调用
get_historical_data("SBUX", "20190617", close_only=True)
您将日期作为字符串传递但是当您使用read\u csv读取数据帧时,此列 (包含8位字符串)转换为整数
这种差异可能是问题的根源
尝试两件事:
如果您将
date
行转换为datetime
,就可以了然后,您的列将被正确格式化,以便在其他地方使用。您可以在
pd.read_csv()
下面插入此行:相关问题 更多 >
编程相关推荐