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

pandas.Timestamp.floor对不同时间戳返回不同结果的原因排查

Pandas 1.5.0中48小时向下取整结果不一致的原因

你在Pandas 1.5.0中执行以下代码时,发现两个时间戳的48小时向下取整结果不一致:

import pandas as pd

def test(now):
    now = pd.Timestamp(now)
    interval = pd.Timedelta("48 hours")
    floored = now.floor(interval)
    diff = now - floored

    print(f"{now}, {interval}, {floored}, {diff}")

test('2023-10-18 23:59:03.793642')
test('2023-10-11 23:59:03.793642')

输出结果:

2023-10-18 23:59:03.793642, 48 hours, 2023-10-18 00:00:00, 0 days 23:59:03.793642
2023-10-11 23:59:03.793642, 48 hours, 2023-10-10 00:00:00, 1 days 23:59:03.793642

原因分析

这个差异的核心是Pandas 1.5.0中使用Timedelta作为floor()的频率参数时,是从Unix纪元(1970-01-01 00:00:00 UTC)开始计算间隔周期,而非以目标日期的自然日为起点:

  • 对于2023-10-18 00:00:00,它与纪元的时间差恰好是48小时的整数倍。因此2023-10-18 23:59:03向下取整时,最近的符合条件的时间点就是当天0点。
  • 对于2023-10-11 00:00:00,它与纪元的时间差不是48小时的整数倍,最近的符合条件的时间点是2023-10-10 00:00:00(该点与纪元的时间差是48小时的整数倍),因此取整结果为这个时间点。

解决方案

如果你需要基于自然日的48小时间隔(比如从偶数日/奇数日0点开始计算周期),可以改用2D频率参数直接取整:

# 使用自然日的48小时间隔(2天)
floored = now.floor('2D')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:26:03