首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Morningstar的Pandas Datareader

带有Morningstar的Pandas Datareader
EN

Stack Overflow用户
提问于 2018-05-25 08:30:55
回答 4查看 5.1K关注 0票数 1

我正在抓取熊猫的网页,使用的是morningstar的API。每隔一段时间,我就会用一个自动收报机刮掉一个网站,而morningstar会与之纠缠不休,导致python崩溃。

我已经在下面添加了相关的代码行,它几乎总是有效的,我不认为是我的代码导致了错误,但我无法绕过熊猫冻结在我身上。在这里,Date是一个DataReader格式正确的变量,它不会引发问题。

代码语言:javascript
复制
import pandas as pd
import pandas_datareader.data as web

df = web.DataReader(ticker, "morningstar", date)

如果滚动条卡住了,几分钟后,pandas会打印出"adding (insert ticker here) to retry list“这句话(它自己,而不是我的print语句)。消息弹出后不久,我得到一个弹出窗口,上面写着"Python意外退出“。

我曾尝试用计时器将datareader封装在while循环中,以停止它并转移到下一个报价器,但它不起作用。我假设这是因为控制流。我还尝试使用interruptingcow模块,希望它能有所帮助,但得到了与常规计时器相同的结果。

有没有办法绕过这个问题?它每次都会使我的脚本崩溃。我遇到的一些令人头疼的代码是“BBXTB”、“CRXPF”、“IMMVD”和“FFRMF”。

EN

回答 4

Stack Overflow用户

发布于 2018-07-02 10:34:23

我仍然不知道为什么自动收报机会失败,并正在调查。但是,通过直接修改pandas_datareader\mstar\daily.py,我能够允许失败而不使脚本崩溃。

我的版本是0.6.0。说明仅适用于此版本。

第134 - 138行如下所示:

代码语言:javascript
复制
if len(failed) > 0 and self.retry_count > 0:
    # TODO: This appears to do nothing since
    # TODO: successful symbols are not added to
    self._dl_mult_symbols(symbols=failed)
    self.retry_count -= 1

计数器放在错误的位置,需要与上面的行交换,因此:

代码语言:javascript
复制
if len(failed) > 0 and self.retry_count > 0:
    # TODO: This appears to do nothing since
    # TODO: successful symbols are not added to
    self.retry_count -= 1
    self._dl_mult_symbols(symbols=failed)

这应该允许失败的调用正常退出,而不会导致堆栈溢出。

顺便说一句,https://github.com/pydata/pandas-datareader/blob/master/pandas_datareader/mstar/daily.py显示@dtemkin已经直接修复了当前版本的pandas_datareader,因此这个问题可能会在下一个版本中发布/解决。

您可以通过定位python存储库的位置来找到此文件。我通过Visual Studio2017安装了anaconda,文件位置是:C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pandas_datareader\mstar\daily.py

票数 1
EN

Stack Overflow用户

发布于 2018-07-18 10:23:07

我认为你的问题与this question类似。

下面的代码片段应该会有帮助:

代码语言:javascript
复制
import pandas_datareader
import datetime

start = datetime.datetime(2018, 5, 1)
end = datetime.datetime(2018, 5, 30)

def get_data(ticker):
    try:
        df = pandas_datareader.data.DataReader('%s' % (ticker), 'morningstar', start, end, retry_count=0)
        print(df.tail(5))
    except ValueError:
     print('Ticker Symbol %s is not available!' % (ticker))

get_data('TSLA') #valid Symbol
get_data('yyfy') #not a valid Symbol

retry_countValueError让它为我工作。

票数 1
EN

Stack Overflow用户

发布于 2018-07-16 14:10:24

在0.7.0发布之前,建议从Github repository的主分支下载最新开发版本的Pandas Datareader。如果你使用的是pip,我会推荐:

代码语言:javascript
复制
$ pip install git+https://github.com/pydata/pandas-datareader
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50519924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档