使用pandas_datareader获取Yahoo Finance股票数据时遇TypeError错误
问题与解决方案
问题详情
用于获取股票数据的代码:
import pandas_datareader end = "2022-12-15" start = "2022-12-15" stock_list = ["TATAELXSI.NS"] data = pandas_datareader.get_data_yahoo(symbols=stock_list, start=start, end=end) print(data)
运行后报错:TypeError: string indices must be integers,即使将股票代码以列表形式传入symbols参数,错误依然存在,完整堆栈信息如下:
Traceback (most recent call last): File "C:\Users\Deepak Shetter\PycharmProjects\100DAYSOFPYTHON\mp3downloader.py", line 7, in <module> data = pandas_datareader.get_data_yahoo(symbols=[TATAELXSI], start=start, end=end) File "C:\Users\Deepak Shetter\PycharmProjects\100DAYSOFPYTHON\venv\lib\site-packages\pandas_datareader\data.py", line 80, in get_data_yahoo return YahooDailyReader(*args, **kwargs).read() File "C:\Users\Deepak Shetter\PycharmProjects\100DAYSOFPYTHON\venv\lib\site-packages\pandas_datareader\base.py", line 258, in read df = self._dl_mult_symbols(self.symbols) File "C:\Users\Deepak Shetter\PycharmProjects\100DAYSOFPYTHON\venv\lib\site-packages\pandas_datareader\base.py", line 268, in _dl_mult_symbols stocks[sym] = self._read_one_data(self.url, self._get_params(sym)) File "C:\Users\Deepak Shetter\PycharmProjects\100DAYSOFPYTHON\venv\lib\site-packages\pandas_datareader\yahoo\daily.py", line 153, in _read_one_data data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"] TypeError: string indices must be integers
原因分析
这个错误是因为pandas_datareader官方的Yahoo数据接口已失效,Yahoo Finance调整了数据返回格式,旧版本的pandas_datareader无法解析新的响应内容,导致尝试对字符串进行字典索引操作时失败。
解决办法
方法一:改用yfinance库(推荐)
yfinance是专门针对Yahoo Finance数据的第三方库,兼容性更好,官方也推荐用它替代pandas_datareader的Yahoo接口。
- 安装库:
pip install yfinance
- 替换代码:
import yfinance as yf end = "2022-12-15" start = "2022-12-15" stock_list = ["TATAELXSI.NS"] # 下载数据 data = yf.download(stock_list, start=start, end=end) print(data)
方法二:修复pandas_datareader的Yahoo接口(不推荐,稳定性差)
如果坚持使用pandas_datareader,可以安装社区修复的版本,但后续可能仍会出现兼容性问题:
pip install git+https://github.com/pydata/pandas-datareader.git
不过这种方式不如直接使用yfinance可靠。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

