diff --git a/doc/source/whatsnew/v0.25.1.rst b/doc/source/whatsnew/v0.25.1.rst index 69f82f7f85040..ae2ff33f3f219 100644 --- a/doc/source/whatsnew/v0.25.1.rst +++ b/doc/source/whatsnew/v0.25.1.rst @@ -56,7 +56,7 @@ Timezones Numeric ^^^^^^^ -- +- Bug in :meth:`Series.interpolate` when using a timezone aware :class:`DatetimeIndex` (:issue:`27548`) - - diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 0afd42e406c1f..9053edf2d1424 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -30,7 +30,6 @@ is_bool, is_bool_dtype, is_datetime64_any_dtype, - is_datetime64_dtype, is_datetime64tz_dtype, is_dict_like, is_extension_array_dtype, @@ -7023,7 +7022,7 @@ def interpolate( methods = {"index", "values", "nearest", "time"} is_numeric_or_datetime = ( is_numeric_dtype(index) - or is_datetime64_dtype(index) + or is_datetime64_any_dtype(index) or is_timedelta64_dtype(index) ) if method not in methods and not is_numeric_or_datetime: diff --git a/pandas/tests/series/test_missing.py b/pandas/tests/series/test_missing.py index 8398591f1ff1f..8f4c89ee72ae1 100644 --- a/pandas/tests/series/test_missing.py +++ b/pandas/tests/series/test_missing.py @@ -1521,10 +1521,16 @@ def test_interp_nonmono_raise(self): s.interpolate(method="krogh") @td.skip_if_no_scipy - def test_interp_datetime64(self): - df = Series([1, np.nan, 3], index=date_range("1/1/2000", periods=3)) - result = df.interpolate(method="nearest") - expected = Series([1.0, 1.0, 3.0], index=date_range("1/1/2000", periods=3)) + @pytest.mark.parametrize("method", ["nearest", "pad"]) + def test_interp_datetime64(self, method, tz_naive_fixture): + df = Series( + [1, np.nan, 3], index=date_range("1/1/2000", periods=3, tz=tz_naive_fixture) + ) + result = df.interpolate(method=method) + expected = Series( + [1.0, 1.0, 3.0], + index=date_range("1/1/2000", periods=3, tz=tz_naive_fixture), + ) assert_series_equal(result, expected) def test_interp_limit_no_nans(self):