Ich versuche, einen Handelskalender mit Pandas zu erstellen. Ich kann eine cal-Instanz basierend auf dem USFederalHolidayCalendar erstellen. Der USFederalHolidayCalendar stimmt nicht mit dem Handelskalender überein, da der Handelskalender den Columbus Day und den Veterans Day nicht enthält. Der Handelskalender enthält jedoch den Karfreitag (nicht im USFederalHolidayCalendar enthalten). Alles, außer für die letzte Zeile im Code folgt funktioniert:erstellen Handelsfeiertagskalender mit Pandas
from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday
from datetime import datetime
cal = get_calendar('USFederalHolidayCalendar') # Create calendar instance
cal.rules.pop(7) # Remove Veteran's Day rule
cal.rules.pop(6) # Remove Columbus Day rule
tradingCal = HolidayCalendarFactory('TradingCalendar', cal, GoodFriday)
Die tradingCal Instanz scheint in arbeiten, dass ich in der Lage, die Ferien Regeln anzuzeigen.
In[10]: tradingCal.rules
Out[10]:
[Holiday: Labor Day (month=9, day=1, offset=<DateOffset: kwds={'weekday': MO(+1)}>),
Holiday: Presidents Day (month=2, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: Good Friday (month=1, day=1, offset=[<Easter>, <-2 * Days>]),
Holiday: Dr. Martin Luther King Jr. (month=1, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: New Years Day (month=1, day=1, observance=<function nearest_workday at 0x000000000A190BA8>),
Holiday: Thanksgiving (month=11, day=1, offset=<DateOffset: kwds={'weekday': TH(+4)}>),
Holiday: July 4th (month=7, day=4, observance=<function nearest_workday at 0x000000000A190BA8>),
Holiday: Christmas (month=12, day=25, observance=<function nearest_workday at 0x000000000A190BA8>),
Holiday: MemorialDay (month=5, day=31, offset=<DateOffset: kwds={'weekday': MO(-1)}>)]
Wenn ich versuche, die Feiertage in einem Datumsbereich aufzulisten, bekomme ich folgende Fehlermeldung:
In[11]: tradingCal.holidays(datetime(2014, 12, 31), datetime(2016, 12, 31))
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-12-2708cd2db7a0>", line 1, in <module>
tradingCal.holidays(datetime(2014, 12, 31), datetime(2016, 12, 31))
TypeError: unbound method holidays() must be called with TradingCalendar instance as first argument (got datetime instance instead)
Irgendwelche Ideen?
Perfekt, jezrael. Vielen Dank. – vlmercado
Ich denke, das hat ein erhebliches Manko! Mit '.pop' wirkt sich auf die zugrunde liegenden Klasse' pandas.tseries.holiday.USFederalHolidayCalendar' weil es ein „in-place“ Betrieb (nicht sicher, ob der Terminologie). Das bedeutet, dass, wenn Sie cal2 von 'get_calendar (‚USFederalHolidayCalendar‘)' die Regeln sind die gleichen wie 'cal' versuchen und neu zu erstellen. dh Sie erhalten keine * saubere * Version von 'USFederalHolidayCalendar', weil diese nicht mehr existiert, Sie haben sie geändert! – evan54
@ evan54 Das ist mir gerade aufgefallen. Hast du eine Lösung? – WillZ