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

Python如何从pandas DataFrame单列每行的多个日期中提取最大日期

实现代码及修改说明

最优实现方案(推荐)

采用pandas的apply方法批量处理,比循环逻辑更简洁高效,出错概率更低:

import pandas as pd

# 定义单个单元格的处理逻辑
def extract_max_date(cell):
    # 拆分单元格内多个用|分隔的日期,去除前后多余空格
    date_items = [x.strip() for x in str(cell).split("|")]
    # 批量转换为datetime格式,自动过滤无效值
    date_series = pd.to_datetime(date_items, errors="coerce").dropna()
    if date_series.empty:
        return pd.NaT
    # 取最大日期后仅保留日期部分,如需字符串格式可替换为.strftime("%Y-%m-%d")
    return date_series.max().date()

# 直接应用到date列完成全量替换
df_pvt["date"] = df_pvt["date"].apply(extract_max_date)

原有代码的问题

  • 未对单元格内多个用|分隔的日期做拆分处理,直接调用pd.to_datetime会识别失败
  • 计算得到的最大值没有回写入DataFrame,修改不会生效
  • 重复调用max()方法无意义,宽泛的KeyError捕获会掩盖实际运行错误

循环实现的修正版本

如果一定要用循环逻辑实现,可以修改为以下代码:

for i in range(len(df_pvt)):
    cell_val = df_pvt.loc[i, "date"]
    date_str_list = [s.strip() for s in str(cell_val).split("|")]
    date_list = pd.to_datetime(date_str_list, errors="coerce").dropna()
    if not date_list.empty:
        df_pvt.loc[i, "date"] = date_list.max().date()
    else:
        df_pvt.loc[i, "date"] = pd.NaT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03