Skip to content

Commit 27fdbfd

Browse files
1 parent e9b0a3c commit 27fdbfd

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

pandas/tests/tseries/frequencies/test_inference.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,3 +554,26 @@ def test_infer_freq_non_nano_tzaware(tz_aware_fixture):
554554

555555
res = frequencies.infer_freq(dta)
556556
assert res == "B"
557+
558+
559+
@pytest.mark.parametrize(
560+
("data", "expected"),
561+
[
562+
(["2022-01-01T10:00:00", "2022-01-01T10:00:30", "2022-01-01T10:01:00"], "30s"),
563+
(["2022-01-01T10:00:00", "2022-01-01T10:00:37", "2022-01-01T10:01:00"], None),
564+
(["2022-01-01T10:00:00", "2022-01-01T10:00:01", "2022-01-01T10:00:02"], "s"),
565+
(
566+
[
567+
"2022-01-01T10:00:00",
568+
"2022-01-01T10:00:01",
569+
"2022-01-01T10:00:02",
570+
"2022-01-01T10:00:04",
571+
],
572+
None,
573+
),
574+
],
575+
)
576+
@pytest.mark.parametrize("cls", [Index, Series])
577+
def test_infer_freq_pyarrow(data, expected, cls):
578+
obj = cls(data).astype("timestamp[s][pyarrow]")
579+
assert frequencies.infer_freq(obj) == expected

pandas/tseries/frequencies.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@
3333
from pandas.util._decorators import cache_readonly
3434

3535
from pandas.core.dtypes.common import is_numeric_dtype
36-
from pandas.core.dtypes.dtypes import (
37-
DatetimeTZDtype,
38-
PeriodDtype,
39-
)
36+
from pandas.core.dtypes.dtypes import PeriodDtype
4037
from pandas.core.dtypes.generic import (
4138
ABCIndex,
4239
ABCSeries,
@@ -112,20 +109,16 @@ def infer_freq(
112109
>>> pd.infer_freq(idx)
113110
'D'
114111
"""
112+
from pandas.api.types import is_datetime64_any_dtype
115113
from pandas.core.api import DatetimeIndex
116114

117-
if isinstance(index, ABCSeries):
118-
values = index._values
119-
if not (
120-
lib.is_np_dtype(values.dtype, "mM")
121-
or isinstance(values.dtype, DatetimeTZDtype)
122-
or values.dtype == object
123-
):
124-
raise TypeError(
125-
"cannot infer freq from a non-convertible dtype "
126-
f"on a Series of {index.dtype}"
127-
)
128-
index = values
115+
if isinstance(index, ABCSeries) and not (
116+
is_datetime64_any_dtype(index) or index.dtype == object
117+
):
118+
raise TypeError(
119+
"cannot infer freq from a non-convertible dtype "
120+
f"on a Series of {index.dtype}"
121+
)
129122

130123
inferer: _FrequencyInferer
131124

0 commit comments

Comments
 (0)