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
相关产品推荐
相关产品推荐

