Python Pandas datetime列天数计算问题:结果与预期不符
问题分析与解决方法
核心原因
你用datetime.datetime.now()获取的是带时分秒的当前时间,而你的Created列大概率是精确到日期(时分秒为00:00:00)。举个例子:
- Created: 2024-05-01 00:00:00
- 当前时间: 2024-05-03 09:30:00
两者的时间差是2天9小时30分,dt.days会取整数部分(向下取整)得到2,但你预期的是按自然日跨度算3天,这就出现了计算偏差。
解决步骤
1. 用当天0点时间替代当前时分秒时间
把datetime.datetime.now()换成当天的0点时间,确保计算的是完整的日期差:
import pandas as pd import datetime # 方法1:用pandas的normalize获取当天0点 df['aging_cal'] = (df['ClosedDate'].fillna(pd.Timestamp.today().normalize()) - df['Created']).dt.days # 方法2:用datetime组合出当天0点 today_0 = datetime.datetime.combine(datetime.date.today(), datetime.time.min) df['aging_cal'] = (df['ClosedDate'].fillna(today_0) - df['Created']).dt.days
2. 若需要包含起始日的天数统计
如果你的预期是「从Created当天开始算第一天」(比如5.1到5.3算3天),直接在计算结果上加1即可:
df['aging_cal'] = (df['ClosedDate'].fillna(pd.Timestamp.today().normalize()) - df['Created']).dt.days + 1
验证示例
假设你的数据是:
| Created | ClosedDate |
|---|---|
| 2024-05-01 00:00:00 | NaN |
| 2024-05-01 00:00:00 | 2024-05-03 00:00:00 |
- 用方法1计算:两行结果均为2天(按时间差的整数天数算)
- 用方法2计算:两行结果均为3天(符合你的预期)
内容的提问来源于stack exchange,提问作者technical
相关产品推荐
相关产品推荐

