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

如何在不转换datetime类型的前提下比较日期差值

问题描述

我创建了如下DataFrame,将日期列转为datetime类型后计算了日期差值:

import pandas as pd

df = pd.DataFrame({'Date 1': ['3/10/2020', '3/11/2020', '3/12/2020'],
                   'Date 2': ['3/14/2020', '1/11/2021', '6/03/2020']})
df['Date 1'] = pd.to_datetime(df['Date 1'])
df['Date 2'] = pd.to_datetime(df['Date 2'])
df['Date Diff'] = abs(df['Date 1'] - df['Date 2'])
df

生成的DataFrame内容如下:

Date 1Date 2Date Diff
2020-03-102020-03-144 days
2020-03-112021-01-11306 days
2020-03-122020-06-0383 days

我想要新增一个标记列,判断日期差值是否超过90天,尝试用loc操作时出现报错:

df["Over 90 Days"] = ""
df['Over 90 Days'].loc[df['Date Diff'] > 90] = True
df['Over 90 Days'].loc[df['Date Diff'] <= 90] = False
df

报错信息:

TypeError: Invalid comparison between dtype=timedelta64[ns] and int

我尝试将日期差值转为纯数字但未成功,恳请解决。

解决方法

方法1:将整数转为Timedelta类型比较

直接把90天转为pandas的Timedelta对象,和Date Diff列进行比较,一步生成布尔值列:

df["Over 90 Days"] = df['Date Diff'] > pd.Timedelta(days=90)

方法2:提取天数数值进行比较

通过.dt.days提取日期差值的天数(整数类型),再和90比较:

df["Over 90 Days"] = df['Date Diff'].dt.days > 90

这种方式适合需要单独使用天数数值的场景。

方法3:修正原loc写法(不推荐)

如果坚持使用原思路,需先将列初始化为布尔类型,再修正比较条件:

df["Over 90 Days"] = False
df.loc[df['Date Diff'] > pd.Timedelta(days=90), 'Over 90 Days'] = True

注意不要将列初始化为字符串类型,避免出现类型混乱问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:08:23