Skip to content

Commit 2e13849

Browse files
committed
Merge pull request #6657 from rosnfeld/issue_6648
REGR: fixing Timestamp/Series subtraction, resolves #6648
2 parents f0055c5 + 6bba5e7 commit 2e13849

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

pandas/tseries/tests/test_tslib.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
from pandas import tslib
66
import datetime
77

8-
from pandas.core.api import Timestamp
8+
from pandas.core.api import Timestamp, Series
99
from pandas.tslib import period_asfreq, period_ordinal
1010
from pandas.tseries.index import date_range
1111
from pandas.tseries.frequencies import get_freq
1212
from pandas import _np_version_under1p7
1313
import pandas.util.testing as tm
14+
from pandas.util.testing import assert_series_equal
1415

1516
class TestTimestamp(tm.TestCase):
1617
def test_repr(self):
@@ -333,6 +334,15 @@ def test_timestamp_and_datetime(self):
333334
self.assertEqual((Timestamp(datetime.datetime(2013, 10, 13)) - datetime.datetime(2013, 10, 12)).days, 1)
334335
self.assertEqual((datetime.datetime(2013, 10, 12) - Timestamp(datetime.datetime(2013, 10, 13))).days, -1)
335336

337+
def test_timestamp_and_series(self):
338+
timestamp_series = Series(date_range('2014-03-17', periods=2, freq='D', tz='US/Eastern'))
339+
first_timestamp = timestamp_series[0]
340+
341+
if not _np_version_under1p7:
342+
delta_series = Series([np.timedelta64(0, 'D'), np.timedelta64(1, 'D')])
343+
assert_series_equal(timestamp_series - first_timestamp, delta_series)
344+
assert_series_equal(first_timestamp - timestamp_series, -delta_series)
345+
336346
def test_addition_subtraction_types(self):
337347
# Assert on the types resulting from Timestamp +/- various date/time objects
338348
datetime_instance = datetime.datetime(2014, 3, 4)

pandas/tslib.pyx

+5-4
Original file line numberDiff line numberDiff line change
@@ -707,11 +707,12 @@ cdef class _Timestamp(datetime):
707707
return result
708708

709709
def __sub__(self, other):
710-
if isinstance(other, datetime):
711-
return datetime.__sub__(self, other)
710+
if is_timedelta64_object(other) or is_integer_object(other) \
711+
or isinstance(other, timedelta) or hasattr(other, 'delta'):
712+
neg_other = -other
713+
return self + neg_other
712714

713-
neg_other = -other
714-
return self + neg_other
715+
return datetime.__sub__(self, other)
715716

716717
cpdef _get_field(self, field):
717718
out = get_date_field(np.array([self.value], dtype=np.int64), field)

0 commit comments

Comments
 (0)