pandas DataFrame计算日期与今日差值结果异常问题求解
问题根因
你的计算结果异常是因为日期解析逻辑完全错误:
- 你通过字符串拆分只提取了日期中的月份数字(比如
2018/5/21拆分后取到的是整数5),丢弃了年、日信息 - 当你把单独的整数传入
pd.to_datetime()时,pandas会默认将整数解析为Unix时间戳,基准时间是1970-01-01,转出来的时间全是1970年1月的极早期时间点,和当前日期做差自然会得到-19000余天的错误结果。
正确实现方案
不要拆分日期字符串单独取月份,先把完整的日期列整体解析为datetime类型,再做差值计算:
import pandas as pd # 完整解析日期列,指定格式提升解析效率、避免歧义 df_transactions['date_parsed'] = pd.to_datetime(df_transactions['date'], format='%Y/%m/%d') # 计算与当日0点的时间差(normalize()会把当前时间的时分秒置为0) time_difference = df_transactions['date_parsed'] - pd.Timestamp.now().normalize() # 如果需要提取月份字段,在解析完成的日期列上直接取属性即可,无需拆分字符串 df_transactions['month'] = df_transactions['date_parsed'].dt.month print(time_difference)
额外说明
- 如果需要拿到时间差对应的整数天数,可以直接调用
.dt.days属性:diff_in_days = time_difference.dt.days - 如果需要计算间隔整月数,不要直接对月份数字做减法,要基于解析后的完整日期,通过年、月字段组合计算,避免跨年时结果错误。
内容的提问来源于stack exchange,提问作者soof_bodo
相关产品推荐
相关产品推荐

