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

Pandas合并含numpy数组列的DataFrame报错:unhashable type: 'numpy.ndarray'

解决pandas合并numpy数组列时的unhashable报错

问题原因

pd.merge要求用于连接的键必须是可哈希类型,而numpy.ndarray是可变对象,不支持哈希计算,直接将其作为连接列就会触发unhashable type: 'numpy.ndarray'错误。

解决方案

以下是几种可行的处理方式,可根据你的数组场景选择:

1. 转numpy数组为元组(推荐)

元组是不可变可哈希类型,能精确匹配数组元素,不会丢失信息:

# 转换数组列为元组
A['_2_tuple'] = A['_2'].apply(tuple)
B['1_tuple'] = B['1'].apply(tuple)

# 基于元组列合并
merged_df = pd.merge(A, B, left_on='_2_tuple', right_on='1_tuple')

# 可选:清理临时生成的元组列
merged_df = merged_df.drop(['_2_tuple', '1_tuple'], axis=1)

2. 转numpy数组为字符串

适合数组元素格式简单的场景,注意复杂元素可能因字符串表示问题导致匹配偏差:

# 转换数组列为字符串
A['_2_str'] = A['_2'].apply(lambda x: str(x))
B['1_str'] = B['1'].apply(lambda x: str(x))

# 基于字符串列合并
merged_df = pd.merge(A, B, left_on='_2_str', right_on='1_str')

# 可选:清理临时列
merged_df = merged_df.drop(['_2_str', '1_str'], axis=1)

3. 拆分数组为多列合并(适用于固定长度的一维数组)

如果所有数组长度一致,可拆分成多个普通列进行合并,匹配精度高:

# 示例:假设数组长度为3
# 拆分A的数组列
A[['a_col1', 'a_col2', 'a_col3']] = pd.DataFrame(A['_2'].tolist(), index=A.index)
# 拆分B的数组列
B[['b_col1', 'b_col2', 'b_col3']] = pd.DataFrame(B['1'].tolist(), index=B.index)

# 基于多列合并
merged_df = pd.merge(A, B, left_on=['a_col1', 'a_col2', 'a_col3'], right_on=['b_col1', 'b_col2', 'b_col3'])

# 可选:清理拆分后的列
merged_df = merged_df.drop(['a_col1', 'a_col2', 'a_col3', 'b_col1', 'b_col2', 'b_col3'], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:20:25