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

如何取消yf.pdr_override()?恢复pandas_datareader原有功能

解决yfinance覆盖pandas_datareader后无法读取FRED数据的问题

核心原因

yf.pdr_override()本质是替换了pandas_datareader.data.get_data_yahoo函数,但这个全局替换会意外干扰DataReader对非Yahoo数据源(比如FRED)的处理逻辑,导致它错误地将数据源标识(如'fred')当成日期格式解析,从而抛出ValueError: time data 'fred' does not match format '%Y-%m-%d'。

无需重启内核的解决方法

方法1:提前备份原函数,按需切换

在第一次调用yf.pdr_override()前,先备份pandas_datareader原生的get_data_yahoo函数,后续需要读取FRED数据时还原,用完Yahoo数据后可重新覆盖:

import pandas_datareader.data as pdr
import yfinance as yf

# 备份原生函数
orig_get_data_yahoo = pdr.get_data_yahoo

# 启用yfinance覆盖,获取Yahoo股票数据
yf.pdr_override()
df_stock = pdr.get_data_yahoo("AAPL", start="2023-01-01")

# 还原原生函数,读取FRED数据
pdr.get_data_yahoo = orig_get_data_yahoo
df_fred = pdr.DataReader("CSUSHPINSA", "fred", start="2020-01-01")

# 后续若需再次获取Yahoo数据,重新执行覆盖即可
yf.pdr_override()

方法2:直接用yfinance原生函数,避免全局覆盖

放弃全局覆盖操作,直接用yfinance的download函数获取股票数据,完全不干扰pandas_datareader的原生逻辑:

import pandas_datareader.data as pdr
import yfinance as yf

# 用yfinance原生方法拉取股票数据
df_stock = yf.download("AAPL", start="2023-01-01")

# 直接读取FRED数据,无任何冲突
df_fred = pdr.DataReader("CSUSHPINSA", "fred", start="2020-01-01")

方法3:手动恢复FRED数据源映射(进阶)

如果前两种方法无效,可直接恢复DataReader内部的数据源处理映射,确保FRED请求被正确路由:

from pandas_datareader.fred import FredReader
import pandas_datareader.data as pdr

# 恢复FRED对应的Reader类映射
pdr._READERS['fred'] = FredReader

# 正常读取FRED数据
df_fred = pdr.DataReader("CSUSHPINSA", "fred", start="2020-01-01")

注意事项

  • 方法1兼顾了原有使用习惯和多数据源需求,是最通用的方案;
  • 方法2更简洁,推荐长期使用以避免全局修改带来的潜在冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:55:20