Skip to content

Commit 484e0b4

Browse files
authored
CLN: simplify to_offset (#34444)
1 parent 1e0335f commit 484e0b4

File tree

2 files changed

+6
-36
lines changed

2 files changed

+6
-36
lines changed

pandas/_libs/tslibs/offsets.pyx

+5-27
Original file line numberDiff line numberDiff line change
@@ -3532,16 +3532,6 @@ prefix_mapping = {
35323532
]
35333533
}
35343534

3535-
_name_to_offset_map = {
3536-
"days": Day(1),
3537-
"hours": Hour(1),
3538-
"minutes": Minute(1),
3539-
"seconds": Second(1),
3540-
"milliseconds": Milli(1),
3541-
"microseconds": Micro(1),
3542-
"nanoseconds": Nano(1),
3543-
}
3544-
35453535
# hack to handle WOM-1MON
35463536
opattern = re.compile(
35473537
r"([+\-]?\d*|[+\-]?\d*\.\d*)\s*([A-Za-z]+([\-][\dA-Za-z\-]+)?)"
@@ -3695,26 +3685,12 @@ cpdef to_offset(freq):
36953685
delta = _get_offset(name) * stride
36963686

36973687
elif isinstance(freq, timedelta):
3698-
from .timedeltas import Timedelta
3699-
3700-
delta = None
3701-
freq = Timedelta(freq)
3702-
try:
3703-
for name in freq.components._fields:
3704-
offset = _name_to_offset_map[name]
3705-
stride = getattr(freq.components, name)
3706-
if stride != 0:
3707-
offset = stride * offset
3708-
if delta is None:
3709-
delta = offset
3710-
else:
3711-
delta = delta + offset
3712-
except ValueError as err:
3713-
raise ValueError(INVALID_FREQ_ERR_MSG.format(freq)) from err
3688+
return delta_to_tick(freq)
37143689

3715-
else:
3690+
elif isinstance(freq, str):
37163691
delta = None
37173692
stride_sign = None
3693+
37183694
try:
37193695
split = re.split(opattern, freq)
37203696
if split[-1] != "" and not split[-1].isspace():
@@ -3744,6 +3720,8 @@ cpdef to_offset(freq):
37443720
delta = delta + offset
37453721
except (ValueError, TypeError) as err:
37463722
raise ValueError(INVALID_FREQ_ERR_MSG.format(freq)) from err
3723+
else:
3724+
delta = None
37473725

37483726
if delta is None:
37493727
raise ValueError(INVALID_FREQ_ERR_MSG.format(freq))

pandas/tests/tseries/frequencies/test_to_offset.py

+1-9
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def test_to_offset_leading_plus(freqstr, expected):
137137
(dict(hours=1), offsets.Hour(1)),
138138
(dict(hours=1), frequencies.to_offset("60min")),
139139
(dict(microseconds=1), offsets.Micro(1)),
140+
(dict(microseconds=0), offsets.Nano(0)),
140141
],
141142
)
142143
def test_to_offset_pd_timedelta(kwargs, expected):
@@ -146,15 +147,6 @@ def test_to_offset_pd_timedelta(kwargs, expected):
146147
assert result == expected
147148

148149

149-
def test_to_offset_pd_timedelta_invalid():
150-
# see gh-9064
151-
msg = "Invalid frequency: 0 days 00:00:00"
152-
td = Timedelta(microseconds=0)
153-
154-
with pytest.raises(ValueError, match=msg):
155-
frequencies.to_offset(td)
156-
157-
158150
@pytest.mark.parametrize(
159151
"shortcut,expected",
160152
[

0 commit comments

Comments
 (0)