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

Pandas中Timestamp与纳秒级Timedelta相加结果异常问题

你遇到的现象本质是浮点数精度误差和pandas对Timedelta浮点输入的取整规则共同导致的,具体逻辑如下:

1. 基础前提

  • pd.Timestamp(1) 传入整数参数时,默认以纳秒为单位解析为Unix时间,对应值就是1970-01-01 00:00:00.000000001,内部存储的纳秒计数为1。
  • pandas的Timedelta内部统一以64位整数存储纳秒计数,所有输入的非纳秒单位值都会先转换为纳秒整数后再参与运算。

2. 浮点数精度误差的影响

你给seconds、microseconds参数传入的1e-9、1e-3都是十进制浮点数,而Python默认的双精度浮点数是二进制存储,这两个值都无法被精确表示:

  • 1e-9 秒理论上等于1纳秒,但实际双精度存储的1e-9略小于真实值,乘以1e9转纳秒后得到的结果约为0.9999999999999999,不足1纳秒。
  • 1e-3 微秒理论上等于1纳秒,同理1e-3的二进制浮点表示略小于真实值,乘以1000转纳秒后同样不足1纳秒。
  • 1e-6 秒理论上等于1000纳秒,这个值的浮点误差非常小,乘以1e9转纳秒后结果非常接近1000,不存在不足1的问题。

3. pandas的取整规则

pandas将浮点输入转换为纳秒整数时,会采用向零截断的逻辑,不足1纳秒的部分会被直接丢弃:

  • pd.Timedelta(seconds=1e-9) 实际转换后的纳秒计数为0,和原时间戳相加后自然还是原值0.000000001,和你预期的加1纳秒不符。
  • pd.Timedelta(microseconds=1e-3) 实际转换后的纳秒计数也为0,相加后同样无变化。
  • pd.Timedelta(nanoseconds=1) 传入的是整数,不存在精度损失,转换后纳秒计数为1,相加后得到0.000000002,符合预期。
  • pd.Timedelta(seconds=1e-6) 转换后的纳秒计数为1000,相加后得到1+1000=1001纳秒,对应0.000001001,和示例结果一致。

你可以通过打印Timedelta的value属性验证上述结论,该属性会返回内部存储的纳秒整数值:

print(pd.Timedelta(seconds=1e-9).value)  # 输出0
print(pd.Timedelta(microseconds=1e-3).value)  # 输出0
print(pd.Timedelta(nanoseconds=1).value)  # 输出1
print(pd.Timedelta(seconds=1e-6).value)  # 输出1000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:54:03