You need to enable JavaScript to run this app. Pandas DataFrame按两列排序时报TypeError: unhashable type: 'numpy.ndarray'
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame按两列排序时报TypeError: unhashable type: 'numpy.ndarray'

报错原因

这个TypeError: unhashable type: 'numpy.ndarray'报错的根因是:pandas做多列排序时,需要将多列的值组合为可哈希的元组完成排序比较,如果参与排序的列名/列值中存在不可哈希的numpy数组类型元素,就会触发报错。而单列排序时不需要做跨列的元组组合,因此不会触发对应检查,可以正常运行。

解决步骤

步骤1:排查并修复异常类型

  • 首先检查列名是否为numpy字符串类型而非Python原生字符串,执行以下代码将列名统一转为原生字符串:
df.columns = df.columns.astype(str)
  • 再检查两列的元素是否混入了numpy数组,执行以下代码将两列值统一转为字符串标量:
df['Country'] = df['Country'].astype(str)
df['Sample'] = df['Sample'].astype(str)

完成转换后再执行原来的排序代码即可正常运行:

df_sorted = df.sort_values(by=['Country','Sample'])

步骤2:替代排序方案(可选)

如果上述转换后仍然报错,可以通过构造排序键的方式绕过底层类型检查,实现相同的双列排序效果:

# 构造双列组合排序键
df['sort_key'] = df.apply(lambda row: (row['Country'], row['Sample']), axis=1)
# 按键排序后删除临时键列
df_sorted = df.sort_values(by='sort_key').drop('sort_key', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 18:06:02