Python获取Pandas DataFrame列唯一值时unhashable type: 'list'错误如何解决
问题成因
- Pandas的
unique()方法基于哈希表实现去重逻辑,要求序列内的所有元素都是可哈希类型(即具备固定不变的哈希值,比如字符串、数值、元组等)。列表是Python中的可变类型,没有固定哈希值,无法作为哈希表的键参与去重计算,因此触发TypeError: unhashable type: 'list'报错。 - 你使用的Crowdtangle导出数据中,
country_mentions_domestic字段会把单条内容提到的多个国内国家/地区以列表格式存储,和其他存储字符串的字段结构不同,因此无法直接调用unique()方法。
解决方法
根据实际需求选择对应方案即可:
方案1:统计所有出现过的单个国家唯一值
如果要提取该字段下所有提到过的独立国家名称,先把嵌套的列表拆平再去重:
# 先过滤空值,再拆平所有列表后去重 all_unique_countries = list({ country for sublist in df.country_mentions_domestic.dropna() for country in sublist })
方案2:统计国家组合的唯一值
如果要把单条内容里提到的多个国家作为一个整体去重,先把列表转为可哈希的元组再执行去重:
# 转元组后去重,得到元组格式的国家组合 unique_country_combinations = df.country_mentions_domestic.dropna().apply(tuple).unique() # 如需转回列表格式可追加一步转换 unique_country_combinations = [list(item) for item in unique_country_combinations]
内容的提问来源于stack exchange,提问作者Nicolai MC
相关产品推荐
相关产品推荐

