@@ -5188,6 +5188,27 @@ INVALID_FREQ_ERR_MSG = "Invalid frequency: {0}"
5188
5188
_offset_map = {}
5189
5189
5190
5190
5191
+ deprec_to_valid_alias = {
5192
+ " H" : " h" ,
5193
+ " BH" : " bh" ,
5194
+ " CBH" : " cbh" ,
5195
+ " T" : " min" ,
5196
+ " S" : " s" ,
5197
+ " L" : " ms" ,
5198
+ " U" : " us" ,
5199
+ " N" : " ns" ,
5200
+ }
5201
+
5202
+
5203
+ def raise_invalid_freq (freq: str , extra_message: str | None = None ) -> None:
5204
+ msg = f" Invalid frequency: {freq}."
5205
+ if extra_message is not None:
5206
+ msg += f" {extra_message}"
5207
+ if freq in deprec_to_valid_alias:
5208
+ msg += f" Did you mean {deprec_to_valid_alias[freq]}?"
5209
+ raise ValueError(msg )
5210
+
5211
+
5191
5212
def _warn_about_deprecated_aliases(name: str , is_period: bool ) -> str:
5192
5213
if name in _lite_rule_alias:
5193
5214
return name
@@ -5236,7 +5257,7 @@ def _validate_to_offset_alias(alias: str, is_period: bool) -> None:
5236
5257
if (alias.upper() != alias and
5237
5258
alias.lower() not in {"s", "ms", "us", "ns"} and
5238
5259
alias.upper().split("-")[0].endswith(("S", "E"))):
5239
- raise ValueError (INVALID_FREQ_ERR_MSG.format( alias))
5260
+ raise ValueError (raise_invalid_freq( freq = alias))
5240
5261
if (
5241
5262
is_period and
5242
5263
alias in c_OFFSET_TO_PERIOD_FREQSTR and
@@ -5267,8 +5288,9 @@ def _get_offset(name: str) -> BaseOffset:
5267
5288
offset = klass._from_name(* split[1 :])
5268
5289
except (ValueError , TypeError , KeyError ) as err:
5269
5290
# bad prefix or suffix
5270
- raise ValueError(INVALID_FREQ_ERR_MSG.format(
5271
- f"{name}, failed to parse with error message: {repr(err )}")
5291
+ raise_invalid_freq(
5292
+ freq = name,
5293
+ extra_message = f" Failed to parse with error message: {repr(err)}."
5272
5294
)
5273
5295
# cache
5274
5296
_offset_map[name] = offset
@@ -5399,9 +5421,10 @@ cpdef to_offset(freq, bint is_period=False):
5399
5421
else :
5400
5422
result = result + offset
5401
5423
except (ValueError , TypeError ) as err:
5402
- raise ValueError (INVALID_FREQ_ERR_MSG.format(
5403
- f" {freq}, failed to parse with error message: {repr(err)}" )
5404
- ) from err
5424
+ raise_invalid_freq(
5425
+ freq = freq,
5426
+ extra_message = f" Failed to parse with error message: {repr(err)}"
5427
+ )
5405
5428
5406
5429
# TODO(3.0?) once deprecation of "d" is enforced, the check for it here
5407
5430
# can be removed
@@ -5417,7 +5440,7 @@ cpdef to_offset(freq, bint is_period=False):
5417
5440
result = None
5418
5441
5419
5442
if result is None :
5420
- raise ValueError (INVALID_FREQ_ERR_MSG.format( freq) )
5443
+ raise_invalid_freq( freq = freq )
5421
5444
5422
5445
try :
5423
5446
has_period_dtype_code = hasattr (result, " _period_dtype_code" )
0 commit comments