使用pandas_datareader获取Yahoo Finance股票数据时遇TypeError报错
解决pandas_datareader拉取Yahoo Finance数据时的TypeError错误
错误原因
Yahoo Finance的网页结构与接口已更新,旧版pandas_datareader内置的YahooDailyReader模块依赖的解析逻辑失效,无法正确处理返回的响应内容(当前返回的是字符串而非预期的JSON结构),因此触发string indices must be integers类型错误。
解决方案
方法1:改用yfinance库(推荐)
yfinance是专门针对Yahoo Finance数据维护的第三方库,兼容性更强,使用逻辑与原代码接近:
- 先安装yfinance:
pip install yfinance
- 替换代码如下:
import yfinance as yf # 直接下载指定时间段的股票数据 stocks = yf.download('MSFT', start='2020-01-14', end='2023-01-14') # 或通过Ticker对象获取更多维度的数据 msft = yf.Ticker('MSFT') stocks = msft.history(start='2020-01-14', end='2023-01-14')
方法2:适配pandas_datareader使用yfinance底层(可选)
如果坚持使用pandas_datareader框架,可通过覆盖底层实现适配:
- 确保已安装yfinance后,修改代码:
from pandas_datareader import data as pdr import yfinance as yf # 让pandas_datareader调用yfinance的接口 yf.pdr_override() stocks = pdr.get_data_yahoo('MSFT', start='2020-01-14', end='2023-01-14')
补充说明
pandas_datareader官方已不再维护原Yahoo数据源的解析逻辑,官方文档也明确推荐使用yfinance替代,因此优先选择方法1。
内容的提问来源于stack exchange,提问作者der_Leo
相关产品推荐
相关产品推荐

