python - 通过 time.sleep 避免 yfinance 的限制
问题描述
大新手来了 我正在使用 pandas_datareader 和 yfinance 创建一个包含许多股票的 excel 工作簿,但最近我收到了越来越多的“无法读取符号”错误,对于肯定仍然存在的股票。通常我可以再次运行代码并且它会工作,但问题似乎慢慢变得更糟。我听说它暗示也许雅虎不喜欢一次收到那么多请求,也许 time.sleep 方法可能是解决方案。
但是我已经足够初学者了,我只是不知道如何编写该代码。下面是我的代码;我想只是延迟完全相同的东西,我猜是在每只股票之间。
import pandas_datareader as web
from datetime import datetime
import pandas as pd
start = datetime(2020,9,1)
end = datetime(2021,12,31)
stock = [ 'ACHC', 'ACIW', [many more stocks listed here cut for simplicity], 'TECH', 'SAM']
df = web.DataReader(stock, 'yahoo', start, end)
df.to_excel(f'excelfilename.xlsx')
提前致谢
解决方案
我还尝试运行您的代码。我不知道为什么,但它给了我一个错误,所以我安装了雅虎金融库并修复了代码。我创建了一个空数据框并将每只股票添加到其中。
import pandas_datareader.data as web
from datetime import datetime
import pandas as pd
import yfinance as yf
start = datetime(2020,9,1)
end = datetime(2021,12,31)
stocks= ['ACHC','ACIW','TECH','SAM']
dfs = pd.DataFrame()
for stock in stocks:
print(stock)
df = yf.download(stock, start, end)
df['stock'] = stock
dfs = dfs.append(df, ignore_index=True)
dfs.to_excel(f'excelfilename.xlsx')
dfs.head()
打开 | 高的 | 低的 | 关 | 调整关闭 | 体积 | 股票 | |
---|---|---|---|---|---|---|---|
0 | 31.13 | 31.42 | 30.6 | 30.91 | 30.91 | 385700 | 乙酰胆碱酯酶 |
1 | 29.73 | 30.99 | 29.73 | 30.57 | 30.57 | 226500 | 乙酰胆碱酯酶 |
2 | 30.76 | 31.2 | 30.41 | 31.12 | 31.12 | 379300 | 乙酰胆碱酯酶 |
3 | 31.15 | 31.5 | 29.92 | 30.18 | 30.18 | 411200 | 乙酰胆碱酯酶 |
4 | 30.7 | 30.82 | 29.2 | 29.81 | 29.81 | 459500 | 乙酰胆碱酯酶 |
编辑: 如果您想按库存水平排列它们,请在列表中一次获取一个库存,并通过删除不必要的列来更改分层索引的级别。然后将分层索引名称转换为单行并重命名列。之后,重新排序列。
df = yf.download(stocks, start, end)
df.drop(['Adj Close',], axis=1, inplace=True)
df = df.swaplevel(1, 0, axis=1)
df.columns = ["_".join(a) for a in df.columns.to_flat_index()]
df.sort_index(axis=1, inplace=True)
日期 | ACHC_关闭 | ACHC_高 | ACHC_低 | ACHC_Open | ACHC_卷 |
---|---|---|---|---|---|
2020-08-31 00:00:00 | 30.91 | 31.42 | 30.6 | 31.13 | 385700 |
2020-09-01 00:00:00 | 30.57 | 30.99 | 29.73 | 29.73 | 226500 |
2020-09-02 00:00:00 | 31.12 | 31.2 | 30.41 | 30.76 | 379300 |
2020-09-03 00:00:00 | 30.18 | 31.5 | 29.92 | 31.15 | 411200 |
2020-09-04 00:00:00 | 29.81 | 30.82 | 29.2 | 30.7 | 459500 |
推荐阅读
- mysql - MySQL 将 CHAR(32) 数据类型转换为 BINARY(16) 而不会丢失数据
- javascript - 将自动完成添加到 jstree 输入节点
- r - renderDataTable 不能正确显示字符
- mongodb - 将字符串元素从 mongo 数组转换为 int
- wildfly - WildFly CLI 针对嵌入式服务器运行脚本
- r - 如何根据应用于大量列的“不等于”标准对数据框进行子集化?
- angularjs - Chrome 插件和网络应用程序 keycloak 之间的共享会话
- fullcalendar - 完整的日历将 fc-heading 和 fc-item 包装到单个 div
- php - PHPUnit 在断言失败时运行回调
- amazon-web-services - 如何将每个请求从 CloudFront 转发到源 S3