使用Pandas Datareader获取Morningstar数据仅返回5天价格的问题求助
解决Morningstar数据源仅返回5天股票数据的问题
嘿,作为Python新手碰到这种数据源限制的问题确实头疼,我来帮你梳理下可能的解决办法:
问题原因分析
你遇到的情况大概率是pandas_datareader对Morningstar数据源的适配存在局限,或者Morningstar的公开API本身就对免费用户的历史数据获取做了天数限制,导致无论设置多大的日期范围,都只能拿到最近几天的数据。
方案一:调整pandas_datareader版本并优化代码
- 先检查并升级你的pandas_datareader到兼容Python3.6的稳定版本(比如0.8.1,更高版本可能不再支持Python3.6),在终端执行:
pip install pandas_datareader==0.8.1
- 优化代码,正确解析Morningstar返回的多层索引结构:
import datetime import pandas_datareader.data as web start = datetime.datetime(2016, 1, 1) end = datetime.datetime(2016, 1, 10) # 获取数据时适配Morningstar的多层索引结构 df = web.DataReader("AAPL", 'morningstar', start, end) # 直接提取目标股票的数据并整理索引 df = df.xs('AAPL', level='Symbol') print(df.head())
不过要注意,即使这样调整,Morningstar的免费数据源可能还是有数据范围限制,不一定能拿到你想要的完整历史数据。
方案二:换用更稳定的yfinance数据源
既然Yahoo旧数据源失效了,yfinance是官方推荐的替代方案,它能稳定获取完整的历史股票数据,操作也很简单:
- 安装兼容Python3.6的yfinance版本:
pip install yfinance==0.1.67
- 使用yfinance重写你的代码:
import datetime import yfinance as yf start = datetime.datetime(2016, 1, 1) end = datetime.datetime(2016, 1, 10) # 获取AAPL的历史数据 df = yf.download("AAPL", start=start, end=end) print(df.head())
这个方案的稳定性和数据完整性都比Morningstar好很多,更适合新手使用。
如果你尝试后还有问题,可以告诉我你的pandas_datareader版本或者运行时的报错信息,我再帮你排查~
内容的提问来源于stack exchange,提问作者Verdi Esteban Rey Blanco
相关产品推荐
相关产品推荐

