You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pdr.get_data_yahoo循环拉取股票数据出现日期缺失如何解决

问题成因
  1. 雅虎财经接口存在明确的请求频率限制,当前代码仅设置1秒的固定请求间隔,仍会触发平台限流规则。接口被限流后不会抛出可被try-except捕获的明显异常,只会返回截断的部分数据甚至仅最近1条交易数据,最终被代码直接写入CSV文件。
  2. pandas_datareader内置的雅虎数据接口已停止维护多年,本身存在会话复用、参数传递的逻辑缺陷,批量循环请求时容易出现前序请求的参数残留,导致后续请求返回的数据异常。
  3. 小概率为标的本身在指定时间范围内存在停牌、退市等情况,对应交易日期本身就较少,该情况可通过单独拉取同时间范围的标的数据排查排除。
解决方案
  • 调整请求间隔策略,替换固定1秒等待为随机间隔,规避固定频率的限流检测:
    导入random模块后,将time.sleep(1)修改为time.sleep(random.uniform(1.5, 3))
  • 替换雅虎接口适配层,使用仍在活跃维护的yfinance库兼容原有逻辑:
    安装yfinance后在代码开头添加如下2行即可,原有pdr.get_data_yahoo调用无需修改,批量拉取稳定性会大幅提升:
    import yfinance as yf
    yf.pdr_override()
    
  • 新增数据完整性校验逻辑,拉取到数据后先校验数据量是否符合预期,不符合则自动重试,重试失败再标记异常,避免直接写入残缺数据:
    比如指定时间范围预期有N个交易日,可添加判断if len(df) < int(N*0.8),触发后重试当前标的拉取,最多重试3次仍不达标再打印错误信息。
  • 自定义requests会话复用逻辑,避免每次请求新建连接导致的接口校验异常,降低请求失败概率。

内容的提问来源于stack exchange,提问作者LOUIS PALANKI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:27:00