yfinance设置小于1天的interval参数下载数据返回空DataFrame问题咨询
yfinance拉取小于日级数据返回空DataFrame的原因及解决方案
核心原因分析
- 时间间隔与查询参数的适配限制:雅虎财经接口对不同时间粒度的可查询范围有明确约束,1小时级数据最多支持查询最近730天内的数据,且部分非美股标的对
period参数的适配存在异常,优先使用明确的start、end参数指定时间范围可降低适配问题概率。 - 标的本身无日内数据供给:你使用的
SPX.L是标普500指数在伦敦市场的挂牌品种,雅虎财经仅对主流场内交易品种提供完整的日内粒度数据,部分指数类、跨市场挂牌品种本身就不对外公开小于日级的交易数据,属于数据源本身的限制,与代码逻辑无关。 - 版本兼容性问题:旧版本yfinance存在非美股日内数据拉取的已知bug,可先升级到最新版本验证,升级命令为
pip install --upgrade yfinance。 - 网络访问限制:如果所在网络无法正常访问雅虎财经的全部数据节点,也可能出现日度数据可正常拉取、但日内数据节点访问失败返回空的情况。
修正验证方案
测试代码
import yfinance as yf import datetime # 第一步:用主流美股标的验证接口可用性 test_ticker = "AAPL" df_test = yf.download(tickers=test_ticker, period="5d", interval="1h", auto_adjust=True, prepost=False) print("AAPL小时级数据测试结果:") print(df_test.head()) # 第二步:指定明确时间范围拉取目标标的数据 end = datetime.datetime.now() start = end - datetime.timedelta(days=5) target_ticker = "SPX.L" df_target = yf.download(tickers=target_ticker, start=start, end=end, interval="1h", auto_adjust=True, prepost=False) print("SPX.L小时级数据测试结果:") print(df_target.head()) # 可选测试:用标普500原生代码测试 spx_ticker = "^GSPC" df_spx = yf.download(tickers=spx_ticker, period="5d", interval="1h", auto_adjust=True, prepost=False) print("标普500原生代码^GSPC小时级数据测试结果:") print(df_spx.head())
结果判断逻辑
- 若AAPL测试返回正常数据,说明工具和网络无问题,目标标的
SPX.L本身无公开小时级数据,可更换为标普500原生代码^GSPC拉取日内数据。 - 若AAPL测试也返回空数据,优先升级yfinance版本后重试,仍异常则检查网络访问雅虎财经接口的可用性。
内容的提问来源于stack exchange,提问作者mkemper
相关产品推荐
相关产品推荐

