diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index bb21bed2dc779..816d8abec1428 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -1897,7 +1897,12 @@ def _validate_frequency(cls, index, freq, **kwargs): try: on_freq = cls._generate_range( - start=index[0], end=None, periods=len(index), freq=freq, **kwargs + start=index[0], + end=None, + periods=len(index), + freq=freq, + unit=index.unit, + **kwargs, ) if not np.array_equal(index.asi8, on_freq.asi8): raise ValueError diff --git a/pandas/tests/frame/methods/test_asfreq.py b/pandas/tests/frame/methods/test_asfreq.py index 5b3e1614e1ada..9fa9f27e7e312 100644 --- a/pandas/tests/frame/methods/test_asfreq.py +++ b/pandas/tests/frame/methods/test_asfreq.py @@ -17,6 +17,10 @@ class TestAsFreq: + @pytest.fixture(params=["s", "ms", "us", "ns"]) + def unit(self, request): + return request.param + def test_asfreq2(self, frame_or_series): ts = frame_or_series( [0.0, 1.0, 2.0], @@ -197,3 +201,11 @@ def test_asfreq_with_unsorted_index(self, frame_or_series): result = result.asfreq("D") tm.assert_equal(result, expected) + + def test_asfreq_after_normalize(self, unit): + # https://github.com/pandas-dev/pandas/issues/50727 + result = DatetimeIndex( + date_range("2000", periods=2).as_unit(unit).normalize(), freq="D" + ) + expected = DatetimeIndex(["2000-01-01", "2000-01-02"], freq="D").as_unit(unit) + tm.assert_index_equal(result, expected)