fix yahoo finance

2018/07/01 11:19
阅读数 35

用Python获取Yahoo数据

在学python机器学习,网上找了实战教程,有需要从yahoo获取股票数据,但一开始就遇到问题了,折腾了一天。以下给出问题以及解决方法。

编程环境:Linux Ubuntu16, python3.6, anaconda 1.6.14, conda 4.5.4, pandas 0.23

============================================================================

问题1:下载pandas _datareader时出现环境解释出错

因为yahoo数据需要通过pandas _datareader模块获取,所以需要下载安装此包

用conda install pandas _datareader出现环境解析错误(因为用的是anaconda建立python编译和编辑环境的,所有用到conda安装):

python@ubuntu:~$ conda install pandas_datareader
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - pandas_datareader

Current channels:

  - https://repo.anaconda.com/pkgs/main/linux-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/free/linux-64
  - https://repo.anaconda.com/pkgs/free/noarch
  - https://repo.anaconda.com/pkgs/r/linux-64
  - https://repo.anaconda.com/pkgs/r/noarch
  - https://repo.anaconda.com/pkgs/pro/linux-64
  - https://repo.anaconda.com/pkgs/pro/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.

解决一:然后改用pip install pandas _datareader可以成功安装!

解决二:后来发现,我在用conda安装改模块时,jupyter notebook还在运行,所以尝试关掉之后再次用conda install pandas _datareader发现已经可以成功安装了。

 

问题2:使用import pandas_datareader as pdr时出现ImportError:cannot import name 'is_list_like'

网上找了好多方法,包括在stackflow上面的案列,始终找不到适合我的方法。

解决一:然后放弃网上搜寻解决方案,改为自己摸索。因为出现的错误提示是不能导入名为‘is_list_like’模块,所以找到出错的代码处在fred.py模块中的第一行from pandas.core.common.data import is_list_like,因为在环境中找不到common文件夹和该文件夹下面的模块,所以出现导入is_list_like时该路径出错。

随后,百度查找:panda is_list_like找到pandas 官方api文档,点击source可以进入到源代码模块。最后发现is_list_like在以下路径中是以一个方法存在的

最后,我改掉了fred.py的第一行导入路径,变为:from pandas.core.dtype.inference import is_list_like,再次导入pandas_datareader模块时成功了!

 

问题3:运行如下代码时,出现ImmediateDeprecationError,即此时Yahoo! Finance已经不存在了,因为2017年Yahoo!被Verizon收购了

Yahoo Daily has been immediately deprecated due to large breaks in the API without the  
introduction of a stable replacement

代码如下:

  1.  
    import pandas as pd
  2.  
    import datetime
  3.  
    import pandas_datareader.data as web
  4.  
    start = datetime.datetime( 2010,1,1)
  5.  
    end = datetime.datetime( 2017,1,1)
  6.  
    df = web.get_data_yahoo( 'SPY','yahoo',start, end)

百度找到了一个在CSDN博客中的解决办法之一:安装fix_yahoo_finance(pip install),然后在获取数据前运行以下代码即可。

  1.  
    import fix_yahoo_finance as fy
  2.  
    fy.pdr_override()
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部