pandas 1.3.3中全pd.NaT行调用idxmax行为与旧版本不一致问题
pandas全NaT行调用idxmax抛出异常问题解答
这是pandas 1.3.0到1.3.3版本的已知bug,不属于操作错误。
问题原因
该问题是pandas 1.3版本迭代时,重构datetime类型相关聚合逻辑的过程中,遗漏了全NaT行/列在idxmax/idxmin方法中的边界处理场景,和float类型全NaN序列的处理逻辑不一致,违反了官方文档中「全空序列调用idxmax返回NaN」的约定。
解决方案
你可以根据使用场景选择以下任意一种方式规避问题:
- 临时降级到pandas 1.2.4版本,等待后续稳定版本修复后再升级
- 调用
idxmax前对数据做兼容处理,示例代码如下:
import pandas as pd import numpy as np df2 = pd.DataFrame({'a': [pd.NaT], 'b': [pd.NaT]}) # 先将NaT替换为极小时间值计算idxmax,再把全空行的结果替换回NaN res = df2.replace(pd.NaT, pd.Timestamp.min).idxmax(axis=1) res[df2.isna().all(axis=1)] = np.nan print(res)
- 升级到pandas 1.3.4及以上版本,该bug已经在后续补丁版本中被修复,全NaT行调用
idxmax会和全NaN浮点行表现一致,返回预期的NaN值。
内容的提问来源于stack exchange,提问作者PlushMascot
相关产品推荐
相关产品推荐

