使用列表绘制四组数据韦恩图报错: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
相关产品推荐
相关产品推荐

