上一篇的完整程式碼是這樣的
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, 如果是False就pass
如果需要上櫃, 就把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

df = web.get_data_yahoo([k],start, end) 這一段當遇到 1106等不存在的股票代號時會出錯而停止,可有解法 ?
您好, 我剛剛試也是出錯, 之前是順利的, 改成這樣就可以了~ from pandas_datareader import data as web import datetime as dt import fix_yahoo_finance as yf 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 回覆區好像沒辦法縮排, 我會修改上面的程式碼, 您在參考一下囉~
您好 請問df.to_csv(k + '.csv')這段要怎麼改成指定位置 我寫df.to_csv(r'D:\ 'k + '.csv')是錯誤的
您好~ 改成df.to_csv("D://" + k + '.csv')就可以囉!
您好~ 請問要抓台指指數,它的代碼是什麼?
您好, 台指指數在yahoo代碼是^TWII 不過可以從 https://finance.yahoo.com/quote/%5ETWII/ 點選中間的Historical Data 選一段你喜歡的區間 按Apply 再按download data就可以下載了
請問樓主 如果要下載週和月的CSV歷史資料是否可以,爬文都沒有找到方法。 謝謝
您好, 我也沒有找到耶~ 爬文後只有看到類似這樣的 from pandas_datareader import data as web import datetime import pandas as pd import fix_yahoo_finance as yf start = datetime.datetime(2017, 1, 1) end = datetime.datetime(2018, 1, 1) df = web.get_data_yahoo("0050.TW", start, end) df.index = pd.to_datetime(df.index) def take_first(array_like): return array_like[0] def take_last(array_like): return array_like[-1] output = df.resample('W').agg({'Open': take_first, 'High': 'max', 'Low': 'min', 'Close': take_last, 'Adj Close': take_last, 'Volume': 'sum'}) # to put the labels to Monday output = output[['Open', 'High', 'Low', 'Close','Adj Close', 'Volume']] output.index = output.index + pd.DateOffset(days=-6) print (output)
請問大大 不曉得可以下載大盤的csv嗎 大大找到那個程式好像是用shift天數的方式 是否要下載週和月 要去修改原始yahoo finance fix 謝謝
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(2020, 1, 1) df = web.get_data_yahoo('^TWII',start, end) df.to_csv(r'c:\1.csv') 試看看囉~剛剛抓沒有問題
請問大大為何我pip install yfinance及pandas_datareader模組皆已下載成功,但要用時卻找不到呢?謝謝! ModuleNotFoundError: No module named 'pandas_datareader' ModuleNotFoundError: No module named 'yfinance'
您好, 我剛剛試沒有問題, 您可能要多爬一些網路文章看看~