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

pandas调用idxmax获取每行最新日期列名触发TypeError问题

报错原因

列中同时存在整数0和datetime类型值时,即使手动转换过日期类型,整列dtype会被强制转为object类型,idxmax依赖的argmax归约运算不支持object混合类型,因此触发报错。

解决方案

不需要删除无效行,通过统一类型+空值填充的逻辑即可实现需求,代码如下:

import pandas as pd

# 指定要计算的目标列
target_cols = ['A', 'B', 'C']
# 将列中数值0替换为datetime类型的标准缺失值NaT,统一列类型为datetime64
df[target_cols] = df[target_cols].replace(0, pd.NaT)
# 逐行取最晚日期对应列名,全缺失(原全0行)的结果填充为0
df['Result'] = df[target_cols].idxmax(axis=1).fillna(0)

逻辑说明

  • 替换0为pd.NaT后,三列类型统一为pandas支持的datetime类型,idxmax可正常运行,不会触发类型错误
  • pd.NaT在日期比较时会被自动忽略,不会影响最大值判断
  • 原全0行替换后所有值为NaT,idxmax会默认返回NaN,最终通过fillna(0)统一赋值为要求的0,不会改动原数据集其他行和列的数据,适配大数据集场景

效果验证测试样例
原始测试数据:

ABC
2024-01-01 00:00:002024-03-15 00:00:000
000
2024-05-20 00:00:002024-02-10 00:00:002024-06-01 00:00:00

运行代码后Result列输出:

0    B
1    0
2    C

完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:21:27