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

如何在Pandas中获取含NaN、字符串的日期列的最大日期值

问题描述

需要从Pandas数据表的date列提取最大日期,该列同时包含字符串格式的日期值和NaN空值,样例数据如下:

0    2022-07-07
1           NaN
2    2022-07-08
3           NaN
4    2022-07-10

已尝试的方案均运行报错:

  • 直接执行df['date'].max(),报错:Not supported between instances "str" and "float"
  • 添加numeric_only=True参数、设置is_nan=True参数,问题未解决
  • 尝试numpy实现numpy.nanmax(df.iloc['date'].value),报错:cannot index by location index
解决方案

报错核心原因是date列当前为混合类型:有效日期是字符串格式,空值是浮点型NaN,不同类型的值无法直接比较大小,因此聚合计算会触发类型错误。按以下步骤操作即可得到正确结果:

1. 转换列为标准日期类型

使用pd.to_datetime()将整列转换为Pandas原生datetime类型,无法解析的空值会自动转为日期类型专属空值NaT,不会干扰后续计算:

import pandas as pd
df['date'] = pd.to_datetime(df['date'], errors='coerce')

errors='coerce'参数作用是将所有无法解析为日期的内容统一转为NaT,避免解析流程中断报错

2. 直接取最大值

类型转换完成后,整列数据类型统一,max()方法会自动忽略空值,直接执行即可得到正确的最大日期:

max_date = df['date'].max()

针对给出的样例数据,执行后返回结果为Timestamp('2022-07-10 00:00:00'),符合预期。

之前尝试的方案错误点说明

  • numeric_only=True仅对数值类型列生效,字符串、日期类型列使用该参数不会起作用
  • df.iloc['date']写法本身不符合语法规则:iloc仅支持整数位置索引,按列名取值应使用df['date']或df.loc[:, 'date']
  • 无需额外引入numpy实现计算,Pandas原生datetime类型已经内置了空值兼容的聚合逻辑,直接调用原生方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:31:05