我有一个关于雅虎财经使用Pandas 数据阅读器的功能的问题.几个月来,我一直在使用一个带有股票代码的列表,并按以下行执行它:

import pandas_datareader as pdr
import datetime

stocks = ["stock1","stock2",....]
start = datetime.datetime(2012,5,31)
end = datetime.datetime(2018,3,1)

f = pdr.DataReader(stocks, 'yahoo',start,end)

从昨天开始,我出现了错误"IndexError:list index out range"(索引器:列表索引超出范围),只有在我try 获取多只股票时才会出现该错误.

最近几天有什么变化我必须考虑还是你有更好的办法来解决我的问题?

推荐答案

更新日期:2021-01-19

tickers = ['msft', 'aapl', 'twtr', 'intc', 'tsm', 'goog', 'amzn', 'fb', 'nvda']
df = pdr.DataReader(tickers, data_source='yahoo', start='2017-01-01', end='2020-09-28')

原始答案

如果你通读Pandas DataReader的documentation,他们会立即对多个数据源API进行折旧,其中一个是Yahoo!资金

100

立即弃用Yahoo!Google OptionsQuotesEDGAR.

这可能是你得到IndexError分(或任何其他通常不存在的错误)的罪魁祸首.


然而,还有另一个Python包,其目标是修复对Yahoo!的支持!Pandas DataReader的财务,您可以在这里找到该软件包:

https://pypi.python.org/pypi/fix-yahoo-finance

根据他们的文件:

Yahoo! finance已经停用了他们的历史数据API,导致许多依赖它的程序停止工作.

fix-yahoo-finance提供了一个临时解决方案,它使用Pandas从Yahoo! finance中删除数据并返回数据

基本上是"劫持"pandas_datareader.data.get_data_yahoo()

您只需添加以下内容:

from pandas_datareader import data as pdr
import fix_yahoo_finance as yf

yf.pdr_override() 

stocks = ["stock1","stock2", ...]
start = datetime.datetime(2012,5,31)
end = datetime.datetime(2018,3,1)

f = pdr.get_data_yahoo(stocks, start=start, end=end)

甚至不需要数据阅读器:

import fix_yahoo_finance as yf

stocks = ["stock1","stock2", ...]
start = datetime.datetime(2012,5,31)
end = datetime.datetime(2018,3,1)
data = yf.download(stocks, start=start, end=end)

Python-3.x相关问答推荐

使用Python装载. iso文件

从Metacritic上通过网络擦除游戏数据的问题

我用Kivy创建的应用程序在安卓系统上运行时出错.(attributeerror:';class';对象没有属性';_javaclass__cls_storage';)

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

如何在 histplot 中标记核密度估计

如何从形状汇总图中提取实际值

将两列合并为一列,将它们制成字典 - pandas - groupby

如果原始字符串包含正斜杠,如何返回具有不同可能性的新字符串

python2和python3中的列表生成器

如何使用 regex sub 根据列表中的变量替换字符

使用 pandas 数据帧映射到中转( node )点的跨容量请求

Python:遍历子列表

Tkinter AttributeError:对象没有属性'tk'

Python过滤器函数 - 单个结果

迭代dict值

TypeError:列表索引必须是整数或切片,而不是列表

在不关心项目的情况下运行生成器功能的更简单方法

哪个更有效:Python 文档字符串还是类型提示?

finally 总是在 try 块返回之前运行,那么为什么 finally 块中的更新不会影响 try 块返回的变量的值呢?

注册 Celery 基于类的任务