def test_shift(self): # naive shift shiftedFrame = self.tsframe.shift(5) self.assert_(shiftedFrame.index.equals(self.tsframe.index)) shiftedSeries = self.tsframe['A'].shift(5) assert_series_equal(shiftedFrame['A'], shiftedSeries) shiftedFrame = self.tsframe.shift(-5) self.assert_(shiftedFrame.index.equals(self.tsframe.index)) shiftedSeries = self.tsframe['A'].shift(-5) assert_series_equal(shiftedFrame['A'], shiftedSeries) # shift by 0 unshifted = self.tsframe.shift(0) assert_frame_equal(unshifted, self.tsframe) # shift by DateOffset shiftedFrame = self.tsframe.shift(5, offset=datetools.BDay()) self.assert_(len(shiftedFrame) == len(self.tsframe)) shiftedFrame2 = self.tsframe.shift(5, timeRule='WEEKDAY') assert_frame_equal(shiftedFrame, shiftedFrame2) d = self.tsframe.index[0] shifted_d = d + datetools.BDay(5) assert_series_equal(self.tsframe.getXS(d), shiftedFrame.getXS(shifted_d))
def test_daterange_bug_456(self): # GH #456 rng1 = bdate_range('12/5/2011', '12/5/2011') rng2 = bdate_range('12/2/2011', '12/5/2011') rng2.offset = datetools.BDay() result = rng1.union(rng2) self.assertTrue(isinstance(result, DatetimeIndex))
def test_daterange_bug_456(self): # GH #456 rng1 = DateRange('12/5/2011', '12/5/2011') rng2 = DateRange('12/2/2011', '12/5/2011') rng2.offset = datetools.BDay() result = rng1.union(rng2) self.assert_(type(result) == DateRange)
def __init__(self, start=None, end=None, nPeriods=None, offset=datetools.BDay(), timeRule=None): if timeRule is not None: offset = datetools.getOffset(timeRule) if timeRule is None: if offset in datetools._offsetNames: timeRule = datetools._offsetNames[offset] start = datetools.to_datetime(start) end = datetools.to_datetime(end) if start and not offset.onOffset(start): start = start + offset.__class__(n=1, **offset.kwds) if end and not offset.onOffset(end): end = end - offset.__class__(n=1, **offset.kwds) if nPeriods == None and end < start: end = None nPeriods = 0 if end is None: end = start + (nPeriods - 1) * offset if start is None: start = end - (nPeriods - 1) * offset self.offset = offset self.timeRule = timeRule self.start = start self.end = end self.nPeriods = nPeriods
def generate_range(start=None, end=None, periods=None, offset=datetools.BDay(), time_rule=None): """ Generates a sequence of dates corresponding to the specified time offset. Similar to dateutil.rrule except uses pandas DateOffset objects to represent time increments Parameters ---------- start : datetime (default None) end : datetime (default None) periods : int, optional Note ---- * This method is faster for generating weekdays than dateutil.rrule * At least two of (start, end, periods) must be specified. * If both start and end are specified, the returned dates will satisfy start <= date <= end. Returns ------- dates : generator object See also -------- DateRange, dateutil.rrule """ if time_rule is not None: offset = datetools.getOffset(time_rule) if time_rule is None: if offset in datetools._offsetNames: time_rule = datetools._offsetNames[offset] start = datetools.to_datetime(start) end = datetools.to_datetime(end) if start and not offset.onOffset(start): start = offset.rollforward(start) if end and not offset.onOffset(end): end = offset.rollback(end) if periods is None and end < start: end = None periods = 0 if end is None: end = start + (periods - 1) * offset if start is None: start = end - (periods - 1) * offset cur = start if offset._normalizeFirst: cur = datetools.normalize_date(cur) while cur <= end: yield cur # faster than cur + offset cur = offset.apply(cur)
def test_shift(self): # naive shift shiftedFrame = self.tsframe.shift(5) self.assert_index_equal(shiftedFrame.index, self.tsframe.index) shiftedSeries = self.tsframe['A'].shift(5) assert_series_equal(shiftedFrame['A'], shiftedSeries) shiftedFrame = self.tsframe.shift(-5) self.assert_index_equal(shiftedFrame.index, self.tsframe.index) shiftedSeries = self.tsframe['A'].shift(-5) assert_series_equal(shiftedFrame['A'], shiftedSeries) # shift by 0 unshifted = self.tsframe.shift(0) assert_frame_equal(unshifted, self.tsframe) # shift by DateOffset shiftedFrame = self.tsframe.shift(5, freq=datetools.BDay()) self.assertEqual(len(shiftedFrame), len(self.tsframe)) shiftedFrame2 = self.tsframe.shift(5, freq='B') assert_frame_equal(shiftedFrame, shiftedFrame2) d = self.tsframe.index[0] shifted_d = d + datetools.BDay(5) assert_series_equal(self.tsframe.xs(d), shiftedFrame.xs(shifted_d), check_names=False) # shift int frame int_shifted = self.intframe.shift(1) # noqa # Shifting with PeriodIndex ps = tm.makePeriodFrame() shifted = ps.shift(1) unshifted = shifted.shift(-1) self.assert_index_equal(shifted.index, ps.index) self.assert_index_equal(unshifted.index, ps.index) tm.assert_numpy_array_equal(unshifted.ix[:, 0].valid().values, ps.ix[:-1, 0].values) shifted2 = ps.shift(1, 'B') shifted3 = ps.shift(1, datetools.bday) assert_frame_equal(shifted2, shifted3) assert_frame_equal(ps, shifted2.shift(-1, 'B')) assertRaisesRegexp(ValueError, 'does not match PeriodIndex freq', ps.shift, freq='D') # shift other axis # GH 6371 df = DataFrame(np.random.rand(10, 5)) expected = pd.concat( [DataFrame(np.nan, index=df.index, columns=[0]), df.iloc[:, 0:-1]], ignore_index=True, axis=1) result = df.shift(1, axis=1) assert_frame_equal(result, expected) # shift named axis df = DataFrame(np.random.rand(10, 5)) expected = pd.concat( [DataFrame(np.nan, index=df.index, columns=[0]), df.iloc[:, 0:-1]], ignore_index=True, axis=1) result = df.shift(1, axis='columns') assert_frame_equal(result, expected)