解决Pandas DataFrame列表类型列调用.unique()报错TypeError: unhashable type: 'list'的问题
解决Pandas列表列调用
unique()报错的问题 嘿,这个坑我之前踩过!问题出在unique()方法的要求上——它只接受可哈希的数据类型(比如字符串、元组、数字这些),但你的m_tags列里存的都是列表,而列表是可变对象,天生不可哈希,所以才会触发TypeError: unhashable type: 'list'。
根据你的需求,我给你两种常用的解决方案:
需求1:获取唯一的标签组合
如果你想保留[reheat, cmd]这种完整的标签组,只找出哪些组合是唯一的,可以先把列表转成元组(元组是不可变的,可哈希),再调用unique():
# 将列表列转换为元组列 tags['m_tags_tuple'] = tags['m_tags'].apply(tuple) # 获取唯一的标签组合 unique_tag_groups = tags['m_tags_tuple'].unique() # 如果需要转回列表格式,用列表推导式处理 unique_tag_groups = [list(group) for group in unique_tag_groups]
需求2:获取所有单个标签的唯一值
如果你想找出所有出现过的独立标签(比如reheat、cmd、discharge这些单个值),可以把列表列展开后再去重:
方法1:使用Pandas的explode()(推荐,Pandas 0.25+可用)
# 把每个列表里的标签拆分成单独行 exploded_tags = tags['m_tags'].explode() # 获取唯一的单个标签 unique_single_tags = exploded_tags.unique()
方法2:低版本Pandas的替代方案
如果你的Pandas版本低于0.25,用列表推导式把所有标签提取出来,再用集合去重:
# 提取所有标签到一个大列表 all_individual_tags = [tag for sublist in tags['m_tags'] for tag in sublist] # 用集合去重后转回列表 unique_single_tags = list(set(all_individual_tags))
这样就能完美解决你遇到的问题啦!
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

