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

