Skip to main content
 首页 » 编程设计

python之Seaborn 显示在 Pandas 列中找不到的值

2025年05月04日23mate10pro

原始数据框:

dp.head(10) 

使用推荐的选择方法创建新数据框:

dtest = pd.DataFrame(dp[dp['numdept'].isin([3,6,8,10])]).dropna() 
dtest.reset_index(drop =True, inplace = True) 
dtest.head(10) 

测试以确保只有 [3,6,8,10] 中的值在 dtest['numdept'] 中:

print "numdept is 5:", dtest[dtest["numdept"].isin ([5])] 
print "set of distinct values in the numdept column:", sorted(set(dtest['numdept'].tolist())) 
 
>> numdept is 5: Empty DataFrame 
>> Columns: [numgrade, numyear, numdept] 
>> Index: [] 
>> set of distinct values in the numdept column: [3, 6, 8, 10] 

绘图:

plt.figure(figsize=(16, 8)) 
sb.boxplot(x="numyear", y="numgrade", hue="numdept", data=dtest) 

问题:为什么图例中的“nummdept”类别显示的值不是 3、6、8、10?

问题出现在 ipython 笔记本中,但即使我将代码带到常规环境中也会重复出现。还尝试通过使用建议来避免 seaborn 相关问题 here , 无济于事。

使用 Canopy 1.7.4.3348、jupyter 1.0.0-15、pandas 0.19.0-1 matplotlib 1.5.1-9 和 seaborn 0.7.0-6

编辑:一时冲动,在绘图代码前插入以下内容:

grouped = dtest.groupby(['numdept', 'numyear']) 
grouped.mean() 

输出具有 numdept 值,不应存在于 dtest 中。

这是否使其成为 pandas 错误?

请您参考如下方法:

您正在使用分类变量。看起来图例是基于分类变量中的类别,而不是实际存在的值。分类变量可能表示数据中实际上没有出现的类别,这些类别仍显示在图例中。

如 the documentation 中的建议,您可以执行 dtest.numdept.cat.remove_unused_categories() 删除空类别。