Python pandas报错:reduction operation 'argmax' not allowed for this dtype
解决
argmax不支持 dtype 的分组取最大值行问题 问题原因
尽管Excel中TTL_TRD_QNTY列显示为数值类型,但pandas读入后可能因以下原因被识别为object类型,导致idxmax()报错:
- 单元格存在隐藏非数值字符(如空格、换行符)
- 列名包含前后空格(你的列名是
TTL_TRD_QNTY,前面有空格) - 部分单元格存在空值或无法解析的内容
解决方案
1. 先清理并转换列数据类型
先处理目标列,确保其为数值类型:
# 去除单元格前后空格,转换为数值,无法转换的标记为NaN df[' TTL_TRD_QNTY'] = pd.to_numeric(df[' TTL_TRD_QNTY'].str.strip(), errors='coerce') # 可选:删除包含NaN的无效行(根据业务需求决定) df = df.dropna(subset=[' TTL_TRD_QNTY'])
2. 用高效的pandas内置方法替代循环
原循环代码效率较低,推荐直接使用groupby结合idxmax()获取结果:
# 执行上述类型转换后,直接获取每组最大值对应的整行 result_df = df.loc[df.groupby('SYMBOL')[' TTL_TRD_QNTY'].idxmax()] # 重置索引(可选,让结果更整洁) result_df = result_df.reset_index(drop=True)
3. 验证数据类型(排查用)
如果仍有问题,先检查列的实际类型和内容:
# 查看列的数据类型 print(df[' TTL_TRD_QNTY'].dtype) # 查看前10行的具体内容,确认是否有异常 print(df[' TTL_TRD_QNTY'].head(10))
内容的提问来源于stack exchange,提问作者Rishikesh Sahani
相关产品推荐
相关产品推荐

