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

Pandas含NaT值的日期差计算问题:判断ExitDate为NaT时替换为当前日期

解决DataFrame中NaT判断错误并计算任期(Tenure)

问题根源

  1. np.isnat()仅支持numpy原生的datetime64/timedelta64类型,而pandas的日期列实际是Timestamp类型,直接用它判断NaT会触发错误。
  2. 原函数逻辑存在漏洞:即使检测到NaT并定义了当前日期变量,返回时仍使用原row.ExitDate,未完成替换。

修正后的逐行处理方案

import pandas as pd

def calculateTenure(row):
    # 用pandas原生方法判断NaT
    if pd.isna(row.ExitDate):
        exit_date = pd.Timestamp.now()
    else:
        exit_date = row.ExitDate
    return exit_date.year - row.StartDate.year

df['Tenure'] = df.apply(calculateTenure, axis=1)

更高效的向量化方案(推荐)

逐行apply效率较低,大数据量下优先用向量化操作:

import pandas as pd

# 将ExitDate中的NaT替换为当前时间
exit_dates = df['ExitDate'].fillna(pd.Timestamp.now())
# 计算年份差作为Tenure
df['Tenure'] = exit_dates.dt.year - df['StartDate'].dt.year

扩展:计算更精确的任期

如果需要按天/月计算任期,可补充以下代码:

# 计算天数任期
df['Tenure_Days'] = (exit_dates - df['StartDate']).dt.days

# 计算近似月份任期
df['Tenure_Months'] = (exit_dates.dt.year - df['StartDate'].dt.year)*12 + (exit_dates.dt.month - df['StartDate'].dt.month)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:12:20