You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取pandas infer_freq返回频率字符串中的数字

问题说明

通过pd.infer_freq(df.index)获取时间序列频率时,返回值是「数字+单位」格式的字符串,例如示例中5秒间隔的序列返回值为5S。直接调用int()转换该字符串会触发报错:

ValueError: invalid literal for int() with base 10: '5S'

测试复现代码如下:

import pandas as pd

xdf = pd.DataFrame({'data':range(0,6)},index=pd.date_range('2022-06-03 00:00:00', '2022-06-03 00:00:25', freq='5s'))
print(pd.infer_freq(xdf.index))
# 下面这行转换会报错
tf = int(pd.infer_freq(xdf.index))

预期目标是从频率字符串中提取数字部分,示例中期望得到tf = 5。

实现方案

最通用稳妥的方式是用正则匹配字符串开头的连续数字段,兼容所有pandas支持的频率字符串格式,同时可以兼容无数字前缀的基础频率(比如S代表1秒、D代表1天这类场景)。

import pandas as pd
import re

xdf = pd.DataFrame({'data':range(0,6)},index=pd.date_range('2022-06-03 00:00:00', '2022-06-03 00:00:25', freq='5s'))
freq_str = pd.infer_freq(xdf.index)

match_num = re.match(r'(\d+)', freq_str)
# 匹配到数字就转成int,没匹配到说明间隔是1
tf = int(match_num.group(1)) if match_num else 1

print(tf) # 输出结果5
  • 该方案对15T(15分钟)、2H(2小时)、3D(3天)等所有带数字前缀的频率字符串都能正常提取
  • 对S、T、H、D这类不带数字的默认单位频率,会自动返回间隔值1,不会触发报错

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:54:31