使用pandas_datareader获取Yahoo股票数据时遇TypeError报错求助
解决pandas_datareader读取Yahoo财经数据时的TypeError问题
问题说明
此前正常运行的股票数据获取代码,近期执行时频繁抛出TypeError: string indices must be integers错误,更换股票代码后问题依然存在。错误根源在于Yahoo财经页面结构发生了更新,旧版pandas_datareader的Yahoo数据解析逻辑已无法适配。
解决方案
方案1:使用yfinance替代(推荐)
yfinance是专门针对Yahoo财经数据维护的第三方库,更新及时,兼容性更强。
- 安装yfinance:
pip install yfinance
- 修改后的代码示例:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import yfinance as yf import datetime start = datetime.datetime(2015, 6, 1) end = datetime.datetime(2022, 6, 30) # 下载单只股票数据 sbin = yf.download('SBIN.BO', start=start, end=end) tatamotors = yf.download('TATAMOTORS.BO', start=start, end=end) reliance = yf.download('RELIANCE.BO', start=start, end=end) # 验证数据 print(sbin.head())
方案2:修复pandas_datareader的Yahoo模块(可选)
若坚持使用pandas_datareader,可安装社区修复的分支版本:
pip install pandas-datareader-yahoo
之后代码无需大幅修改,但该方案的稳定性不如yfinance,后续仍可能因Yahoo页面更新再次出现问题。
错误原因解析
原代码中web.DataReader('SBIN.BO','yahoo',...)调用的YahooDailyReader模块,依赖固定的页面结构提取JSON数据。Yahoo财经更新页面后,返回的HTML内容结构变化,导致解析出的j不再是预期的字典类型,而是字符串,进而触发"字符串索引必须为整数"的错误。
内容的提问来源于stack exchange,提问作者Jyoti
相关产品推荐
相关产品推荐

