You need to enable JavaScript to run this app. pandas DataFrame忽略NaT获取datetime.date类型日期最小值方法
优惠活动
大模型
产品
解决方案
定价
更多

pandas DataFrame忽略NaT获取datetime.date类型日期最小值方法

解决方案

可行实现方案

你可以通过行级apply自定义过滤逻辑实现需求,该方案完全兼容超出datetime64[ns]范围的原生Python date对象:

# 选择需要计算最小值的日期列
date_cols = ["DATE_1", "DATE_2", "NO_DATE"]
# 每行过滤掉pd.NaT后计算最小值
df2["min_date"] = df2[date_cols].apply(
    lambda row: min(val for val in row if pd.notna(val)),
    axis=1
)

如果需要兼容整行全为pd.NaT的场景,避免空序列求min抛出报错,可以调整为以下写法:

# 全为NaT的行默认返回pd.NaT
df2["min_date"] = df2[date_cols].apply(
    lambda row: min((val for val in row if pd.notna(val)), default=pd.NaT),
    axis=1
)

原逻辑异常原因

你遇到的问题是因为列中同时存在原生Python date对象和pd.NaT时,pandas会将列的dtype识别为object类型,内置min方法的skipna参数无法正确识别object类型中的pd.NaT,才会返回错误的NaN结果。
手动apply的逻辑直接基于原生date对象的比较规则计算最小值,没有datetime64[ns]的日期范围限制,同时会主动过滤所有pd.NaT值,完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:27:04