From 87daa75c0ca0c6e00f61273dc5d27e8d25bbe1cf Mon Sep 17 00:00:00 2001 From: Scott Sanderson Date: Thu, 29 Sep 2016 10:42:23 -0400 Subject: [PATCH] MAINT: Use Timedelta instead of DateOffset. In days_at_time, use a Timedelta instead of a DateOffset. We were previously using DateOffset to work around a pandas 16 bug even though it raises a PerformanceWarning. Now that we're on pandas 18, we can use the much simpler Timedelta construction. --- zipline/utils/calendars/trading_calendar.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/zipline/utils/calendars/trading_calendar.py b/zipline/utils/calendars/trading_calendar.py index a8e35a07..a931fd32 100644 --- a/zipline/utils/calendars/trading_calendar.py +++ b/zipline/utils/calendars/trading_calendar.py @@ -25,7 +25,6 @@ from pandas import ( DataFrame, date_range, DatetimeIndex, - DateOffset ) from pandas.tseries.offsets import CustomBusinessDay from zipline.utils.calendars._calendar_helpers import ( @@ -830,16 +829,13 @@ def days_at_time(days, t, tz, day_offset=0): # Offset days without tz to avoid timezone issues. days = DatetimeIndex(days).tz_localize(None) - days_offset = days + DateOffset(days=day_offset) - - # Shift all days to the target time in the local timezone, then - # convert to UTC. - - # FIXME: Once we're off Pandas 16, see if we can replace DateOffset with - # TimeDelta. - return days_offset.shift( - 1, freq=DateOffset(hour=t.hour, minute=t.minute, second=t.second) - ).tz_localize(tz).tz_convert('UTC') + delta = pd.Timedelta( + days=day_offset, + hours=t.hour, + minutes=t.minute, + seconds=t.second, + ) + return (days + delta).tz_localize(tz) def holidays_at_time(calendar, start, end, time, tz):