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

Python处理CSV列:提取日期并筛选非最大日期数据的问题

问题描述

我的CSV中有一列名为Version,内容如下:

Version
2024-01-02 rev. 003
2024-01-02 rev. 003
2023-11-17 rev. 003

我需要筛选出除最大日期(即2024-01-02 rev. 003)之外的数据。尝试用不等于最大日期的方式处理时,DataFrame出现了空值,使用的代码如下:

df3['Version'] = pd.to_datetime(df3['Version'], format='%Y-%m-%d', errors="coerce")

print("df3 version=======
", df3['Version'])
df3 = df3[df3['Version'].ne(df3['Version'].max())]
print (df3)
解决方案

问题核心是日期转换时未处理Version列的rev. xxx后缀:用format='%Y-%m-%d'强制转换时,整个字符串不符合指定格式,触发errors="coerce"后生成空值(NaT),导致后续筛选逻辑失效。

以下是几种可行的解决方法:

方法1:提取日期片段后转换

先从字符串中拆分出纯日期部分,再转成datetime类型进行筛选:

# 按空格分割取第一个元素(纯日期)
df3['date'] = pd.to_datetime(df3['Version'].str.split().str[0])
# 获取最大日期
max_date = df3['date'].max()
# 筛选非最大日期的行,最后删除临时列
df3_filtered = df3[df3['date'] != max_date].drop('date', axis=1)
print(df3_filtered)

方法2:让pandas自动识别日期

去掉format参数,让pandas自动解析字符串中的日期部分(适合格式统一的场景):

df3['date'] = pd.to_datetime(df3['Version'], errors="coerce")
max_date = df3['date'].max()
df3_filtered = df3[df3['date'] != max_date].drop('date', axis=1)
print(df3_filtered)

方法3:直接基于字符串前缀筛选

如果日期格式固定为YYYY-MM-DD,可以直接比较字符串前10位,无需转换为datetime:

# 提取日期前缀
df3['date_str'] = df3['Version'].str[:10]
max_date_str = df3['date_str'].max()
# 筛选并删除临时列
df3_filtered = df3[df3['date_str'] != max_date_str].drop('date_str', axis=1)
print(df3_filtered)

以上方法都能避免空值问题,最终筛选出2023-11-17 rev. 003对应的行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:42:15