如何使用 yfinance 检测失败的下载
Posted
技术标签:
【中文标题】如何使用 yfinance 检测失败的下载【英文标题】:How to detect failed downloads using yfinance 【发布时间】:2021-08-13 20:42:56 【问题描述】:我正在使用 API yfinance:https://github.com/ranaroussi/yfinance
使用下面的简单代码:
data = yf.download("A AA AAA Z LOL KE QP")
我得到以下输出:
[*********************100%***********************] 7 of 7 completed
2 Failed downloads:
- LOL: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.
- QP: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.
我想知道如何在我的代码中检测到“LOL”和“QP”失败?
【问题讨论】:
【参考方案1】:这是在 yfinance 包中引发“错误”的代码。这不是一个实际的错误,因此您可能想要覆盖函数 download
,它相当大。
if shared._ERRORS:
print('\n%.f Failed download%s:' % (
len(shared._ERRORS), 's' if len(shared._ERRORS) > 1 else ''))
# print(shared._ERRORS)
print("\n".join(['- %s: %s' %
v for v in list(shared._ERRORS.items())]))
编辑
如果找到获取失败下载的方法:
只需导入shared.py
文件并获取ERRORS
字典。
此 dict 存储下载方法的最后一个错误。它在下载之前被重置,因此可以在下载之后立即访问。
只需使用以下代码:
import yfinance.shared as shared
data = yf.download("A AA AAA Z LOL KE QP")
print(list(shared._ERRORS.keys()))
【讨论】:
非常感谢,它运行良好:)【参考方案2】:在对数据输出多玩了一会儿之后,我发现了一种检查失败值的不优雅的方法,例如元素“LOL”:
all(pd.isna(v) for v in dict(data.Close["LOL"]).values())
它检查收盘价的所有值是否为 nan。
这种方法有效,但我认为不是最优的,可能有更好、更简单的方法。让我们希望有人找到它:)
【讨论】:
以上是关于如何使用 yfinance 检测失败的下载的主要内容,如果未能解决你的问题,请参考以下文章
yf.Tickers 从 yfinance 下载多个代码的信息并动态访问每个代码
使用 python yfinance 多线程下载雅虎股票历史
Yfinance:同时下载多只股票的多个参数(beta、市值等)?