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

使用Pandas resample重采样时间序列遇无效频率错误的咨询

Pandas resample 报错 ValueError: Invalid frequency: 65.117651L 的原因及解决办法

问题复现

使用Pandas的resample方法对时间序列重采样时,通过总时长除以间隔数计算步长,偶尔会触发如下错误:

ValueError: Invalid frequency: 65.117651L

可通过以下代码复现该问题:

import pandas as pd
from pandas import DatetimeIndex

index = DatetimeIndex(['2023-09-14 10:41:11.816999936',
               '2023-09-14 10:41:12.002000128',
               '2023-09-14 10:41:12.101999872',
               '2023-09-14 10:41:12.112999936',
               '2023-09-14 10:41:12.210000128',
               '2023-09-14 10:41:12.308999936',
               '2023-09-14 10:41:12.311000064',
               '2023-09-14 10:41:12.408999936',
                  '2023-09-14 10:41:12.424000',
               '2023-09-14 10:41:12.523000064',
                  '2023-09-14 10:41:12.828000',
               '2023-09-14 10:41:12.829999872',
                  '2023-09-14 10:41:12.924000'],
              dtype='datetime64[ns]', name='TS', freq=None)

pd.DataFrame(index=index).resample('65.117651L')

原因分析

  1. 浮点数精度导致解析异常:Pandas解析字符串格式的频率时,会将毫秒级浮点值转换为纳秒级整数。65.117651L对应65.117651毫秒,理论上等于65117651纳秒,但浮点数的二进制存储特性会引入微小误差,导致实际转换后的数值不符合Pandas对有效频率的校验规则。
  2. 频率的离散性要求:resample依赖规则的时间间隔,当计算出的步长无法被精确转换为整数纳秒(或存在精度丢失)时,会被判定为无效频率。微调数值后,误差刚好被抵消,能转换为合法的纳秒整数,因此错误消失。

解决办法

  • 直接使用纳秒整数指定频率:跳过浮点字符串解析环节,将计算出的毫秒值精确转换为纳秒整数后传入,例如resample('65117651N')(N代表纳秒单位)。
  • 对频率值做四舍五入处理:计算步长后,对浮点数值保留合理小数位(比如4位),例如resample('65.1177L'),避免精度触发校验错误。
  • 使用Timedelta对象替代字符串频率:直接构造pd.Timedelta对象传入,彻底避开字符串解析的精度问题,示例代码:
    pd.DataFrame(index=index).resample(pd.Timedelta(milliseconds=65.117651))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:23:29