Pandas交换操作数后Timedelta相减结果异常,如何解决?
解决Pandas Timestamp相减的负时间差显示问题
当你计算两个pd.Timestamp的差值时,若用较早的时间减去较晚的时间,Pandas会将负的小时间差转换为-1 days +23:59:59.940000这类形式——这是因为Timedelta默认的显示逻辑会把负秒数拆解为负天数加正的时分秒,但实际差值的绝对值仍是0.06秒。以下是无需判断时间先后的解决方法:
直接取时间差的绝对值
这是最简单的方案,不管两个时间的先后顺序,对计算结果调用abs()方法即可得到正的、直观的时间差:t1 = pd.Timestamp('2022-11-02 10:44:22.700000') t2 = pd.Timestamp('2022-11-02 10:44:22.760000') diff = (t1 - t2).abs() # 输出结果:Timedelta('0 days 00:00:00.060000')通过总秒数重构Timedelta
先获取时间差的总秒数绝对值,再用该值重新构造Timedelta对象:total_seconds = abs((t1 - t2).total_seconds()) diff = pd.Timedelta(seconds=total_seconds) # 输出结果:Timedelta('0 days 00:00:00.060000')借助numpy计算后转换
利用numpy的时间差计算逻辑,取绝对值后转成Pandas的Timedelta:import numpy as np diff = pd.Timedelta(np.abs(np.datetime64(t1) - np.datetime64(t2))) # 输出结果:Timedelta('0 days 00:00:00.060000')
本质上,Pandas的负Timedelta显示形式是符合时间差的数学定义的,但对于小跨度的时间差不够直观,通过上述方法可以直接得到你预期的正时间差结果,无需提前判断两个时间的大小关系。
内容的提问来源于stack exchange,提问作者jsiller
相关产品推荐
相关产品推荐

