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

Pandas Timestamp四舍五入至10秒时出现异常问题求助

pandas Timestamp 按10秒舍入不符合预期的修复方案

问题原因

pandas的round()方法默认采用银行家舍入法(四舍六入五成双),当时间秒数处于两个10秒标记的中间点(如5、15、25等)时,会舍入到前一位数字为偶数的标记:

  • 06:46:05 介于00和10之间,秒的十位是0(偶数),故舍至00;
  • 06:46:15 介于10和20之间,秒的十位是1(奇数),故进至20;
  • 06:46:25 介于20和30之间,秒的十位是2(偶数),故舍至20;
    这就导致部分场景下不符合传统四舍五入的预期。

解决方案

方法一:偏移后向下取整(推荐)

通过给时间戳先加5秒,再向下取整到10秒,实现传统四舍五入逻辑:

  • 秒数≤4时,加5秒后仍小于10的整数倍,向下取整到前一个10秒标记;
  • 秒数≥5时,加5秒后达到或超过10的整数倍,向下取整到下一个10秒标记。

代码示例:

import pandas as pd

date = pd.DataFrame([pd.to_datetime('2022-03-02 06:46:05'), pd.to_datetime('2022-03-02 06:46:15'), pd.to_datetime('2022-03-02 06:46:25'), pd.to_datetime('2022-03-02 06:46:35'), pd.to_datetime('2022-03-02 06:46:45'), pd.to_datetime('2022-03-02 06:46:55'), pd.to_datetime('2022-03-02 06:47:05'), pd.to_datetime('2022-03-02 06:47:15'), pd.to_datetime('2022-03-02 06:47:25')])

# 偏移5秒后向下取整到10秒
date[1] = (date[0] + pd.Timedelta(seconds=5)).dt.floor('10s')

print(date)

输出结果:

0                   1
0 2022-03-02 06:46:05 2022-03-02 06:46:10
1 2022-03-02 06:46:15 2022-03-02 06:46:20
2 2022-03-02 06:46:25 2022-03-02 06:46:30
3 2022-03-02 06:46:35 2022-03-02 06:46:40
4 2022-03-02 06:46:45 2022-03-02 06:46:50
5 2022-03-02 06:46:55 2022-03-02 06:47:00
6 2022-03-02 06:47:05 2022-03-02 06:47:10
7 2022-03-02 06:47:15 2022-03-02 06:47:20
8 2022-03-02 06:47:25 2022-03-02 06:47:30

方法二:自定义舍入函数

如果需要更灵活的阈值控制,可以编写自定义函数,根据秒数余数判断向上/向下取整:

import pandas as pd

date = pd.DataFrame([pd.to_datetime('2022-03-02 06:46:05'), pd.to_datetime('2022-03-02 06:46:15'), pd.to_datetime('2022-03-02 06:46:25'), pd.to_datetime('2022-03-02 06:46:35'), pd.to_datetime('2022-03-02 06:46:45'), pd.to_datetime('2022-03-02 06:46:55'), pd.to_datetime('2022-03-02 06:47:05'), pd.to_datetime('2022-03-02 06:47:15'), pd.to_datetime('2022-03-02 06:47:25')])

def custom_round_10s(timestamp):
    if timestamp.second % 10 >= 5:
        return timestamp.ceil('10s')
    else:
        return timestamp.floor('10s')

date[1] = date[0].apply(custom_round_10s)

print(date)

此方法同样能得到符合预期的结果,适合需要调整舍入判断条件的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:05:45