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

使用列表绘制四组数据韦恩图报错:TypeError: unhashable type: 'list'

解决pyvenn绘制韦恩图时的TypeError: unhashable type: 'list'错误

问题场景

读取4个Excel表格为DataFrame后,提取各表中Project Name列非空行的索引列表,使用pyvenn库绘制四圆韦恩图时,触发以下错误:

TypeError: unhashable type: 'list'

原代码如下:

import pandas as pd

df = pd.read_excel(r'E:\Mydata1.xlsx')  
df1 = pd.read_excel(r'E:\Mydata2.xlsx') 
df2 = pd.read_excel(r'E:\Mydata3.xlsx') 
df3 = pd.read_excel(r'E:\Mydata4.xlsx') 

d1 = df[~df['Project Name'].isnull()].index.tolist()
d2 = df1[~df1['Project Name'].isnull()].index.tolist()
d3 = df2[~df2['Project Name'].isnull()].index.tolist() 
d4 = df3[~df3['Project Name'].isnull()].index.tolist() 

from venn import venn
datas = {
    "Data1": {d1},
    "Data2": {d2},
    "Data3": {d3},
    "Data4": {d4},
}
venn(datas) 

错误原因

集合的元素必须是可哈希类型(如整数、字符串),你在创建datas字典时,用{d1}把列表d1直接放入集合,此时集合内的唯一元素是列表本身——而列表属于不可哈希类型,因此触发类型错误。

修正方案

将索引列表直接转换为集合,把{d1}改为set(d1),同理修改其余三个数据集。修正后的代码如下:

import pandas as pd

df = pd.read_excel(r'E:\Mydata1.xlsx')  
df1 = pd.read_excel(r'E:\Mydata2.xlsx') 
df2 = pd.read_excel(r'E:\Mydata3.xlsx') 
df3 = pd.read_excel(r'E:\Mydata4.xlsx') 

d1 = df[~df['Project Name'].isnull()].index.tolist()
d2 = df1[~df1['Project Name'].isnull()].index.tolist()
d3 = df2[~df2['Project Name'].isnull()].index.tolist() 
d4 = df3[~df3['Project Name'].isnull()].index.tolist() 

from venn import venn
datas = {
    "Data1": set(d1),
    "Data2": set(d2),
    "Data3": set(d3),
    "Data4": set(d4),
}
venn(datas) 

修改后,每个字典值都是由索引元素组成的集合,符合pyvenn的输入要求,可正常生成韦恩图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:20:29