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

Pandas问题:使用DataFrame.apply求日期列最大值时出错的原因

问题分析与解决方案

你犯的核心错误是没给apply指定axis=1参数——df.apply()默认按列(axis=0)执行,此时你拿到的row其实是每一列的Series,索引是行标签(Row1、Row2),根本不是你以为的“每行数据”,这直接导致所有索引操作全部失效。

逐个解析错误写法

  • 第一种写法:row.loc[row.index[0], ['A','B']]
    因为row是列Series,row.index[0]是行标签(比如Row1),row.loc[row.index[0]]已经是该列的单个值,再套一层['A','B']相当于给单个值加双重索引,因此报IndexingError: Too many indexers。

  • 第二种写法:row['A','B']
    row的索引是行标签,不存在('A','B')这个键,且不是多级索引,触发KeyError。

  • 第三种写法:row['A']
    row的索引是Row1、Row2,没有A这个索引键,同样触发KeyError。

为什么type(row)返回nan?

当apply按列执行时,你返回的type对象无法被pandas转换成DataFrame列支持的标准数据类型(如数值、日期),因此被强制转换为nan。如果指定axis=1,type(row)会正确返回<class 'pandas.core.series.Series'>。


正确写法

方法1:修正apply参数(适合自定义逻辑场景)

指定axis=1让apply按行处理,直接取指定列的最大值,避免重复写row:

df['MaxDate'] = df.apply(lambda row: row[['A', 'B']].max(), axis=1)

方法2:向量化操作(更高效,优先推荐)

完全不需要apply,直接对指定列调用max并指定axis=1,性能远高于apply(尤其大数据量时):

df['MaxDate'] = df[['A', 'B']].max(axis=1)

执行后得到正确结果:

ABMaxDate
Row12025-06-052025-06-062025-06-06
Row22025-06-072025-06-082025-06-08

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:39