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

pandas-datareader的get_data_yahoo返回近5日数据时序偏移问题求助

问题根因
  • pandas-datareader的get_data_yahoo()接口已停止官方维护,雅虎财经2021年调整了公共接口的鉴权、分页规则,你使用的v0.10旧版本适配失效,多次调用后会触发接口侧缓存返回或数据段截断,返回的时序数据缺失最近两周记录,仅能拉取到最新单日的修正数据,因此出现仅当日数据正确、前4天数据偏移2周的现象。
  • 代码存在变量名重复bug:循环迭代变量与存储数据的df重名,多次迭代后变量覆盖可能引发数据串用。
  • 高频调用雅虎公共接口会触发临时限流,接口会返回缓存的历史数据段而非最新全量数据。
修复方案
  • 替换依赖库:停止使用pandas-datareader的雅虎接口,改用专门适配雅虎财经的yfinance库,该库是目前维护最稳定的雅虎数据第三方适配工具,接口参数、返回格式和原get_data_yahoo基本兼容,无需大幅修改原有逻辑。
  • 修正代码变量命名,避免迭代变量与存储变量重名,修正后参考代码如下:
import yfinance as yf
import pandas as pd

def get_data(ticker):
    df = yf.download(ticker, progress=False)
    return df

for ticker in tickers:
    df = get_data(ticker)
    df = pd.DataFrame(df.Close)
    print(df.tail(5))
  • 若必须保留pandas-datareader依赖,调用时显式指定数据起止时间,避免接口默认返回的时间范围异常,参考代码如下:
from pandas_datareader import data as pdr
import datetime as dt

def get_data(ticker):
    end = dt.datetime.now()
    start = end - dt.timedelta(days=30)
    df = pdr.get_data_yahoo(ticker, start=start, end=end)
    return df
  • 控制接口调用频率,单次请求间隔至少1秒,避免触发雅虎的限流规则。

内容的提问来源于stack exchange,提问作者Frank Nowicki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:05