获取股票数据触发pandas无DataReader属性报错如何解决
问题原因定位
- 命名空间调用错误:
DataReader是pandas_datareader模块提供的方法,pandas本身不包含该能力。你报错堆栈显示执行的代码为pfizer = pd.DataReader("PFE", "yahoo", start, end),使用了pandas的别名pd调用该方法,直接触发属性不存在的报错。你贴出的参考代码中用的是pdr.DataReader,说明你实际运行的本地文件和你贴出的代码不一致,优先检查本地stock analysis.py文件第7行的写法。 - 额外兼容问题:当前pandas-datareader官方的雅虎财经数据源接口已经停止维护,就算修正命名空间问题,也大概率会触发接口请求失败的报错,需要额外做数据源兼容处理。
解决方案
1. 修正命名空间调用
调整本地代码的调用逻辑,确保使用pandas_datareader的别名调用DataReader,参考代码如下:
import pandas_datareader.data as pdr import datetime start = datetime.datetime(2020,1,1) end = datetime.datetime(2020,4,17) # 确保用pdr而非pd调用DataReader pfizer = pdr.DataReader("PFE","yahoo",start,end) pfizer.head()
2. 修复雅虎财经接口兼容问题
如果修正命名空间后出现接口请求报错,安装yfinance作为兼容层即可正常拉取雅虎的股票数据,操作如下:
首先执行安装命令:
pip install yfinance
再调整代码添加兼容配置:
import yfinance as yf # 用yfinance的实现覆盖pandas_datareader的原生雅虎接口 yf.pdr_override() import pandas_datareader.data as pdr import datetime start = datetime.datetime(2020,1,1) end = datetime.datetime(2020,4,17) pfizer = pdr.get_data_yahoo("PFE", start, end) pfizer.head()
内容的提问来源于stack exchange,提问作者Vu Nguyen
相关产品推荐
相关产品推荐

