Skip to content

Commit f941b76

Browse files
authored
BUG: DatetimeIndex with non-nano values and freq='D' throws ValueError (#50773)
* pass unit to validate_frequency * set unit within _validate_frequency Co-authored-by: MarcoGorelli <>
1 parent 4a79485 commit f941b76

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

pandas/core/arrays/datetimelike.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1897,7 +1897,12 @@ def _validate_frequency(cls, index, freq, **kwargs):
18971897

18981898
try:
18991899
on_freq = cls._generate_range(
1900-
start=index[0], end=None, periods=len(index), freq=freq, **kwargs
1900+
start=index[0],
1901+
end=None,
1902+
periods=len(index),
1903+
freq=freq,
1904+
unit=index.unit,
1905+
**kwargs,
19011906
)
19021907
if not np.array_equal(index.asi8, on_freq.asi8):
19031908
raise ValueError

pandas/tests/frame/methods/test_asfreq.py

+12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717

1818

1919
class TestAsFreq:
20+
@pytest.fixture(params=["s", "ms", "us", "ns"])
21+
def unit(self, request):
22+
return request.param
23+
2024
def test_asfreq2(self, frame_or_series):
2125
ts = frame_or_series(
2226
[0.0, 1.0, 2.0],
@@ -197,3 +201,11 @@ def test_asfreq_with_unsorted_index(self, frame_or_series):
197201

198202
result = result.asfreq("D")
199203
tm.assert_equal(result, expected)
204+
205+
def test_asfreq_after_normalize(self, unit):
206+
# https://github.com/pandas-dev/pandas/issues/50727
207+
result = DatetimeIndex(
208+
date_range("2000", periods=2).as_unit(unit).normalize(), freq="D"
209+
)
210+
expected = DatetimeIndex(["2000-01-01", "2000-01-02"], freq="D").as_unit(unit)
211+
tm.assert_index_equal(result, expected)

0 commit comments

Comments
 (0)