You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动