上一篇的完整程式碼是這樣的

from pandas_datareader import data as web
import datetime as dt
import fix_yahoo_finance as yf

import warnings
warnings.filterwarnings("ignore")

yf.pdr_override()
start = dt.datetime(2000, 1, 1)
end = dt.datetime(2016, 1, 1)
df = web.get_data_yahoo(['2002.TW'],start, end)
df.to_csv(r'f:\2002.TW.csv')

那小小改造一下, 畢竟我很懶, 但又想把整個資料都弄到硬碟裡, 那就隨便弄個迴圈吧

先觀察一下, df = web.get_data_yahoo(['2002.TW'],start, end) 裡面['2002.TW']是一個list, TW表示上市股票

stock = []
for i in range(1101,9999) :
    j = str(i) + ".TW"
    stock.append(j)

首先弄一個空list, 然後範圍是1101開始, 因為上市股票從1101台泥開始

然後每個i都要加上TW變成j

看一下前五筆資料

然後再寫一個迴圈

for k in stock :
        df = web.get_data_yahoo([k],start, end)
        if df.empty == False:
            df.to_csv(k + '.csv')
        else :
            pass

因為靠剛剛寫的第一個迴圈, web.get_data_yahoo會把空資料也抓下來

所以多寫df.empty == False, 如果是Falsepass

如果需要上櫃, 就把TW改成TWO就可以囉

那因為網友反應有誤, 所以我加上了錯誤的狀況處理, 大家可以跑跑看喔~

from pandas_datareader import data as web
import datetime as dt
import fix_yahoo_finance as yf

import warnings
warnings.filterwarnings("ignore")

yf.pdr_override()

start = dt.datetime(2010, 1, 1)
end = dt.datetime(2016, 12, 31)


stock = []
for i in range(1101,2002) :
    j = str(i) + ".TW"
    stock.append(j)

for k in stock :
    try : 
        df = web.get_data_yahoo([k],start, end)
        if df.empty == False:
            df.to_csv(k + '.csv')
        else :
            pass
    except : 
        pass

arrow
arrow

    張郎屋 發表在 痞客邦 留言(6) 人氣()