使用numpy.vectorize匹配字典遇'unhashable numpy.ndarray'错误求助
解决方法
问题核心:numpy数组是不可哈希类型,无法直接作为字典的键进行查找,这就是报错的原因。以下是几种可行的解决方案:
情况1:数组为单元素(如每个ndarray仅含一个值)
直接将数组转换为标量后再匹配字典:
# 用.item()提取标量(numpy推荐用法,替代旧版np.asscalar) df['COM_CLOSESTID'] = df['COM_CLOSESTID'].apply(lambda x: COM_DICT.get(x.item()))
情况2:数组为多元素(需将数组转为可哈希的元组)
把每个数组转换成元组(元组是可哈希类型),再作为键查询字典:
df['COM_CLOSESTID'] = df['COM_CLOSESTID'].apply(lambda x: COM_DICT.get(tuple(x)))
情况3:仍想使用numpy.vectorize
自定义处理函数,先将数组转成可哈希类型再调用字典的get方法:
def lookup_dict(arr): return COM_DICT.get(tuple(arr)) # 向量化处理函数 vec_lookup = np.vectorize(lookup_dict) df['COM_CLOSESTID'] = vec_lookup(df['COM_CLOSESTID'].values)
注意:如果你的字典键本身就是numpy数组类型,这种方法不适用——必须确保字典的键和转换后的类型一致(比如键是元组,就把数组转成元组;键是标量,就转成标量)。
内容的提问来源于stack exchange,提问作者ImFabien75
相关产品推荐
相关产品推荐

