2016-07-27 36 views
2

雖然仍然是noob,但我一直在積極學習Python一段時間,這裏是我正在開發的一個項目。我需要收集歷史股價前十天美國在過去的二十年公衆假期,這裏是我做了什麼:(我用pandas_datareader和節假日這裏)過去二十年假日前十天的歷史股價

start=datetime.datetime(1995,1,1) 
end=datetime.datetime(2015,12,31) 
history_price=web.get_data_yahoo('SPY', start, end) 
us_holidays=holidays.UnitedStates() 
test=[] 
for i in dates: 
    if i in us_holidays: 
     test.append((history_price['Adj Close'].ix[pd.date_range(end=i, periods=11, freq='B')])) 
test 

,結果是這樣的:

Freq: B, Name: Adj Close, dtype: float64, 1995-02-06 32.707565 
1995-02-07 32.749946 
1995-02-08 32.749946 
1995-02-09 32.749946 
1995-02-10 32.792328 
1995-02-13 32.802975 
1995-02-14 32.845356 
1995-02-15 33.025457 
1995-02-16 32.983076 
1995-02-17 32.855933 
1995-02-20   NaN 

列表「test」的長度爲233.我的問題是:如何將此列表轉換爲字典,假期是關鍵字,股票價格是每個關鍵字下的值。

預先感謝您的指導。

+0

新年前十天將與聖誕節重疊。你的功能沒有考慮到這一點。 – Alexander

+0

是的,我知道它。從技術上講,我仍然可以在新年前十個工作日提取股票價格,只是跳過聖誕節。 – wastetime909

回答

0

這使用字典和列表理解來生成每個節假日前一組十美國工作日。那些日子的股票價格將作爲價格表,最近的第一個(h-1)和最後的(h-10)存儲在詞典中(鍵入節日)。

from pandas.tseries.holiday import USFederalHolidayCalendar 
from pandas.tseries.offsets import CustomBusinessDay 

holidays = USFederalHolidayCalendar().holidays(start='1995-1-1', end='2015-12-31') 
bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar()) 

start = '1995-01-01' 
end = '2015-12-31' 
days = 10 

dates = {holiday: [holiday - bday_us * n for n in range(1, days + 1)] 
     for holiday in USFederalHolidayCalendar().holidays(start=start, end=end)} 

>>> dates 
{... 
Timestamp('2015-12-25 00:00:00'): [ 
    Timestamp('2015-12-24 00:00:00'), 
    Timestamp('2015-12-23 00:00:00'), 
    Timestamp('2015-12-22 00:00:00'), 
    Timestamp('2015-12-21 00:00:00'), 
    Timestamp('2015-12-18 00:00:00'), 
    Timestamp('2015-12-17 00:00:00'), 
    Timestamp('2015-12-16 00:00:00'), 
    Timestamp('2015-12-15 00:00:00'), 
    Timestamp('2015-12-14 00:00:00'), 
    Timestamp('2015-12-11 00:00:00')]} 

result = {holiday: history_price.ix[dates[holiday]].values for holiday in dates} 

>>> result 
{... 
Timestamp('2015-12-25 00:00:00'): 
    array([ 203.56598 , 203.902497, 201.408393, 199.597201, 197.964166, 
      201.55487 , 204.673725, 201.722125, 199.626485, 198.622952])} 
+0

謝謝,它的工作原理! – wastetime909