如何检查Pandas多索引DataFrame中指定索引是否存在?解决哈希错误
检查Pandas MultiIndex中是否存在指定索引对
你碰到的TypeError: unhashable type: 'list'问题很明确——你用了列表[007, 6000]去判断索引存在性,但Pandas的MultiIndex里的每一组索引是元组类型,而列表是不可哈希的,没法被索引结构识别。
正确的实现方式
直接用元组代替列表就行,注意要和你索引的类型匹配(看你的示例里userid是007这种带前导零的格式,应该是字符串类型,所以要加引号):
if ('007', '6000') in df.index: print('it works')
如果你的索引实际是数字类型(比如007存储为整数7),那就去掉引号用数字元组:
if (7, 6000) in df.index: print('it works')
批量检查的进阶方法
要是你需要一次性检查多组索引,用df.index.isin()会更方便,它能返回布尔数组告诉你哪些索引存在:
# 检查单组索引 if df.index.isin([('007', '6000')]).any(): print('该索引存在') # 批量检查多组索引 check_list = [('007', '6000'), ('009', '3000')] result = df.index.isin(check_list) print(result) # 输出对应每个索引是否在check_list中的布尔值
为什么原来的代码报错?
简单来说:Pandas的索引查找依赖元素的可哈希性,列表是可变对象(可以随时修改里面的元素),所以不可哈希;而元组是不可变对象,具备可哈希性,符合索引查找的要求。
内容的提问来源于stack exchange,提问作者user77005
相关产品推荐
相关产品推荐

