From c8d01a3ee42e2f223fbced5c9612e17fc0a888b0 Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 11 Nov 2020 19:37:01 -0800 Subject: [PATCH] BUG: adding Timedelta to DatetimeIndex raising incorrectly --- doc/source/whatsnew/v1.1.5.rst | 2 +- pandas/core/arrays/datetimelike.py | 2 +- pandas/tests/indexes/datetimes/test_misc.py | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/source/whatsnew/v1.1.5.rst b/doc/source/whatsnew/v1.1.5.rst index a29ae1912e338..3b1f64e730830 100644 --- a/doc/source/whatsnew/v1.1.5.rst +++ b/doc/source/whatsnew/v1.1.5.rst @@ -14,7 +14,7 @@ including other versions of pandas. Fixed regressions ~~~~~~~~~~~~~~~~~ -- +- Regression in addition of a timedelta-like scalar to a :class:`DatetimeIndex` raising incorrectly (:issue:`37295`) - .. --------------------------------------------------------------------------- diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index f2f843886e802..c4e5da3c85ce8 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -964,7 +964,7 @@ def _add_timedeltalike_scalar(self, other): # adding a scalar preserves freq new_freq = self.freq - return type(self)(new_values, dtype=self.dtype, freq=new_freq) + return type(self)._simple_new(new_values, dtype=self.dtype, freq=new_freq) def _add_timedelta_arraylike(self, other): """ diff --git a/pandas/tests/indexes/datetimes/test_misc.py b/pandas/tests/indexes/datetimes/test_misc.py index 375a88f2f2634..88c837e32d261 100644 --- a/pandas/tests/indexes/datetimes/test_misc.py +++ b/pandas/tests/indexes/datetimes/test_misc.py @@ -7,7 +7,7 @@ import pytest import pandas as pd -from pandas import DatetimeIndex, Index, Timestamp, date_range, offsets +from pandas import DatetimeIndex, Index, Timedelta, Timestamp, date_range, offsets import pandas._testing as tm @@ -408,3 +408,15 @@ def test_isocalendar_returns_correct_values_close_to_new_year_with_tz(): dtype="UInt32", ) tm.assert_frame_equal(result, expected_data_frame) + + +def test_add_timedelta_preserves_freq(): + # GH#37295 should hold for any DTI with freq=None or Tick freq + tz = "Canada/Eastern" + dti = date_range( + start=Timestamp("2019-03-26 00:00:00-0400", tz=tz), + end=Timestamp("2020-10-17 00:00:00-0400", tz=tz), + freq="D", + ) + result = dti + Timedelta(days=1) + assert result.freq == dti.freq