1. 程式人生 > >資料分析獲取Yahoo股票資料:使用pandas-datareader時遇到一些問題問題(cannot import name 'is_list_like' 問題)

資料分析獲取Yahoo股票資料:使用pandas-datareader時遇到一些問題問題(cannot import name 'is_list_like' 問題)

1 安裝pandas-datareader依賴包:

因為,我電腦上之前已經安裝了python3.6,先學習了爬蟲,所以已經有了python環境。現在學習資料科學資料分析,再安裝了anaconda,為了不使我電腦環境出現混亂,安裝anaconda後,就沒有把anaconda的環境變數寫到系統環境變數中,那麼安裝第三方等要用命令式的操作就要到安裝目錄的路徑中去開啟cmd:

1.1 使用anaconda的python環境

在anaconda安裝的根目錄,開啟cmd,輸入python,此時就是執行的anaconda的python環境。

1.2 使用conda命令安裝依賴包,或者檢視依賴等要conda 執行的命令

使用conda命令:需要到Anaconda3- >Library ->bin路徑下執行(開啟cmd)

在上述的目錄中開啟cmd,執行conda命令,如安裝依賴包conda install pandas-datareader等

                                                                           檢視anaconda環境中的依賴包:conda list;

2 使用pandas-datareader

2.1 匯入pandas_datareader出現錯誤:cannot import name 'is_list_like'

出現這個,我們可以檢視import 匯入出錯的原因:

裡面說了一個檔案fred.py檔案,我們還不知道什麼原因導致的,查詢網上的解決方法,發現一個有效的方式,修改下該檔案的一條語句:

原fred.py檔案 到開頭import中第一句是這個  from pandas.core.common import is_list_like

我們將這個句修改成:from pandas.api.types import is_list_like  

在回到import,發現匯入成功。

2.2 使用pandas_datareader獲取雅虎Yahoo股票資料,發現出錯,

pandas_datareader.get_data_yahoo('BABA')

裡面的已經說了原因,這個api介面已經被棄用了,查了下資料,發現可能是2017yahoo被Verizon收購的原因。

但是網上又有了新的解決方案:

我們需要額外安裝另一個依賴包:fix_yahoo_finance(再conda install下吧)

安裝成功後 import fix_yahoo_finance as fy

from pandas_datareader import data as pdr
 
import fix_yahoo_finance as yf
yf.pdr_override() #需要呼叫這個函式
 
# 獲取資料
data = pdr.get_data_yahoo("SPY", start="2017-01-01", end="2017-04-30")
data = pdr.get_data_yahoo(["SPY", "IWM"], start="2017-01-01", end="2017-04-30")

Tips:在conda install fix_yahoo_finance,有可能會遇到PackageNotFoundError: ''Package missing in current channels",找不到安裝包的方式(安裝其他依賴包也可能)

解決方法1:

查詢你要安裝的依賴包

anaconda search -t conda 你要安裝的包如yahoo 

(如果環境變數中沒有新增anaconda的python變數,則要在安裝的scripts下執行)

如圖,可以看到查詢到的安裝包(模糊搜尋的結果),當然可能搜尋不到這個包,如一開始那個(最上面沒框起來的部分)

如果找到了,那就可以看到下面一行字 anaconda show <USER/PACKAGE> 這是用來進一步檢視你要安裝的安裝資訊的。

如,我選擇了一個進行檢視

anaconda show postelrich/yahoo-finance

前面會給出這個包的一些資訊,最後面會給出如何進行安裝的目錄,複製它,在來conda就可以了:

 conda install --channel https://conda.anaconda.org/postelrich yahoo-finance

解決方法2:本地安裝

也就是上面遇到,搜尋不到你要安裝的依賴包,怎麼辦?那就下載檔案下來,進行本地安裝啊。

如,我在獲取股票時,以前常用pandas-datareaderr從yahoo的介面獲取股票的資料,但是可惜現在沒辦法了,介面被移除了。

網上一搜發現了一個fix_yahoo_finance包可以實現以前的操作,所以立馬去conda fix_yahoo_finance,發現安裝不了,anaconde search也找不到這個包,所以,我就去fix_yahoo_finance api的網站上找到原始檔的下載地址,下載到本地中。

下載地址:

依賴包,下載解壓之後,發現裡面有個檔案setup.py

有他就好辦了,我們可以通過本地來安裝這個包啊,怎麼安裝

cd到fix_yahoo_finance目錄中,使用 python setup.py install安裝,它就會自動安裝這個依賴到環境中。

不要被我的pythonana迷惑了,這是因為,我電腦同時安裝兩個python,前文提過,所以我把一個python的命令改成了pythonana,這樣就不會讓我的python打架。如果你沒有改,可以忽視,請大膽的使用python安裝即可。

到此,我們使用:

from pandas_datareader import data as pdr
 
import fix_yahoo_finance as yf
yf.pdr_override() #需要呼叫這個函式
 
# 獲取資料
data = pdr.get_data_yahoo("SPY", start="2017-01-01", end="2017-04-30")
data = pdr.get_data_yahoo(["SPY", "IWM"], start="2017-01-01", end="2017-04-30")

可以正常的獲取yahoo中的股票資料,而且請求網路獲取資料也較為穩定。