如何在不转换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 1 | Date 2 | Date Diff |
|---|---|---|
| 2020-03-10 | 2020-03-14 | 4 days |
| 2020-03-11 | 2021-01-11 | 306 days |
| 2020-03-12 | 2020-06-03 | 83 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
相关产品推荐
相关产品推荐

