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
相关产品推荐
相关产品推荐

