使用pandas_datareader从Yahoo Finance批量下载股票数据报错求助
解决pandas_datareader调用Yahoo Finance时的IndexError问题
我之前也碰到过一模一样的情况!Yahoo Finance最近调整了它的底层API接口,旧版本的pandas_datareader没法正确解析新的返回数据,这就是你看到IndexError: list index out of range的原因。下面给你几个可行的解决方案,按优先级排序:
1. 升级pandas_datareader到最新版本
首先试试升级库,开发者可能已经针对Yahoo的接口变动修复了问题:
pip install --upgrade pandas-datareader
升级完成后再运行你原来的代码,大部分情况下这个问题就能解决。
2. 改用yfinance库(更推荐)
如果升级后还是不行,建议直接切换到yfinance——这个库是专门为Yahoo Finance维护的,更新更及时,兼容性更好,而且用法和pandas_datareader很接近:
- 先安装库:
pip install yfinance
- 修改你的代码(几乎不需要大改):
import yfinance as yf import datetime stocks = ["stock1","stock2",....] start = datetime.datetime(2012,5,31) end = datetime.datetime(2018,3,1) # yfinance的download方法返回的结构和pdr.DataReader基本一致 f = yf.download(stocks, start=start, end=end)
你原来处理数据的逻辑几乎不用调整,切换成本非常低。
3. 排查无效股票代码
如果上面两种方法都没用,可能是你列表里的某个股票代码无效(比如已经退市、代码拼写错误)。可以先单独测试单个股票:
test_data = pdr.DataReader("stock1", 'yahoo', start, end) # 或者用yfinance测试 test_data = yf.download("stock1", start=start, end=end)
逐个排查,把无效的股票代码从列表中移除即可。
内容的提问来源于stack exchange,提问作者ScharcoMolten




