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

