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

使用Lambda函数计算DataFrame中日期与今日的年分数及NaT处理

问题解决:计算日期年分数并处理NaT值

错误原因分析

  1. KeyError: 'YEAR_FRAC':你在Lambda函数中尝试引用了尚未创建的YEAR_FRAC列,此时该列还不存在于DataFrame中,导致键查找失败。
  2. AttributeError: 'Series' object has no attribute 'DATE_Col':你对df['DATE_Col'](Series对象)调用apply,Lambda参数x是单个日期元素而非整行数据,自然没有DATE_Col属性。

正确实现方案

方法1:逐行处理(兼容复杂逻辑)

通过df.apply(axis=1)按行处理,同时判断并跳过NaT值:

import pandas as pd
from datetime import datetime

# 假设你的DataFrame名为df
current_date = datetime.now()
df['YEAR_FRAC'] = df.apply(
    lambda row: (current_date - row['DATE_Col']).days / 365.25 
    if pd.notna(row['DATE_Col']) 
    else None,
    axis=1
)
  • 用pd.notna()判断DATE_Col是否为有效日期,NaT值会被设为None(最终转为NaN)
  • 除以365.25是为了兼顾闰年的平均年天数

方法2:向量化操作(推荐,性能更优)

利用Pandas的日期向量运算,自动处理NaT值:

import pandas as pd
from datetime import datetime

current_date = datetime.now()
# 直接计算日期差,提取天数后除以年天数
df['YEAR_FRAC'] = (current_date - df['DATE_Col']).dt.days / 365.25
  • NaT值参与运算后结果会自动转为NaN,无需额外判断
  • 向量化操作比逐行apply快数倍,适合大数据集

NaT值后续处理

如果需要将NaN替换为特定值(比如0),可以用fillna():

df['YEAR_FRAC'] = df['YEAR_FRAC'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:55:19