Skip to content

Commit ee1923c

Browse files
committed
Merge pull request #6818 from sinhrks/timedelta64
BUG: adding np.timedelta64 to DatetimeIndex with tz outputs incorrect
2 parents 516c0c7 + fa508d3 commit ee1923c

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

doc/source/release.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,6 @@ Bug Fixes
315315
as regexs even when ``regex=False`` (:issue:`6777`).
316316
- Bug in timedelta ops on 32-bit platforms (:issue:`6808`)
317317
- Bug in setting a tz-aware index directly via ``.index`` (:issue:`6785`)
318-
<<<<<<< HEAD
319318
- Bug in expressions.py where numexpr would try to evaluate arithmetic ops
320319
(:issue:`6762`).
321320
- Bug in Makefile where it didn't remove Cython generated C files with ``make
@@ -324,6 +323,7 @@ Bug Fixes
324323
- Bug in ``DataFrame._reduce`` where non bool-like (0/1) integers were being
325324
coverted into bools. (:issue:`6806`)
326325
- Regression from 0.13 with ``fillna`` and a Series on datetime-like (:issue:`6344`)
326+
- Bug in adding np.timedelta64 to DatetimeIndex with tz outputs incorrect result (:issue:`6818`)
327327

328328
pandas 0.13.1
329329
-------------

pandas/tseries/index.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -624,17 +624,15 @@ def _add_delta(self, delta):
624624
if isinstance(delta, (Tick, timedelta)):
625625
inc = offsets._delta_to_nanoseconds(delta)
626626
new_values = (self.asi8 + inc).view(_NS_DTYPE)
627-
tz = 'UTC' if self.tz is not None else None
628-
result = DatetimeIndex(new_values, tz=tz, freq='infer')
629-
utc = _utc()
630-
if self.tz is not None and self.tz is not utc:
631-
result = result.tz_convert(self.tz)
632627
elif isinstance(delta, np.timedelta64):
633628
new_values = self.to_series() + delta
634-
result = DatetimeIndex(new_values, tz=self.tz, freq='infer')
635629
else:
636630
new_values = self.astype('O') + delta
637-
result = DatetimeIndex(new_values, tz=self.tz, freq='infer')
631+
tz = 'UTC' if self.tz is not None else None
632+
result = DatetimeIndex(new_values, tz=tz, freq='infer')
633+
utc = _utc()
634+
if self.tz is not None and self.tz is not utc:
635+
result = result.tz_convert(self.tz)
638636
return result
639637

640638
def __contains__(self, key):

pandas/tseries/tests/test_timezones.py

+16
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from pandas.core.datetools import BDay
3232
import pandas.core.common as com
3333

34+
from pandas import _np_version_under1p7
3435

3536
def _skip_if_no_pytz():
3637
try:
@@ -961,6 +962,21 @@ def test_tzaware_offset(self):
961962
offset = dates + offsets.Hour(5)
962963
self.assertEqual(dates[0] + offsets.Hour(5), offset[0])
963964

965+
# GH 6818
966+
for tz in ['UTC', 'US/Pacific', 'Asia/Tokyo']:
967+
dates = date_range('2010-11-01 00:00', periods=3, tz=tz, freq='H')
968+
expected = DatetimeIndex(['2010-11-01 05:00', '2010-11-01 06:00',
969+
'2010-11-01 07:00'], freq='H', tz=tz)
970+
971+
offset = dates + offsets.Hour(5)
972+
self.assert_(offset.equals(expected))
973+
if not _np_version_under1p7:
974+
offset = dates + np.timedelta64(5, 'h')
975+
self.assert_(offset.equals(expected))
976+
offset = dates + timedelta(hours=5)
977+
self.assert_(offset.equals(expected))
978+
979+
964980
if __name__ == '__main__':
965981
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],
966982
exit=False)

0 commit comments

Comments
 (0)