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

如何在保留category类型的前提下从图表中完全移除指定分类?

解决Category类型列筛选后绘图仍显示已移除分类的问题

当你用pandas筛选掉category列中的某个分类(比如Yellow)后,绘图时仍会出现该分类的刻度,核心原因是category类型会保留原始的完整类别集合,筛选操作只是过滤了行数据,但列的类别元数据没有同步更新,所以绘图工具会基于原始类别生成刻度。

不用转换数据类型的解决办法很简单:更新筛选后DataFrame中category列的类别集合,只保留当前存在的分类。

具体步骤与代码示例

先准备测试数据:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 创建带category列的DataFrame
df = pd.DataFrame({
    'color': pd.Categorical(['Red', 'Blue', 'Yellow', 'Red', 'Blue', 'Blue']),
    'count': [2, 3, 1, 2, 3, 1]
})

# 移除Yellow类别的数据
filtered_df = df[df['color'] != 'Yellow']

关键操作:更新Category类别

直接调用cat.remove_unused_categories()自动清理掉未使用的分类:

filtered_df['color'] = filtered_df['color'].cat.remove_unused_categories()

如果需要自定义类别顺序,也可以手动指定保留的类别:

filtered_df['color'] = filtered_df['color'].cat.set_categories(filtered_df['color'].unique())

pandas条形图

此时再用pandas绘图,已移除的分类不会再显示:

filtered_df.plot(kind='bar', x='color', y='count', title='Pandas Bar Plot')
plt.show()

seaborn条形图

同样适用于seaborn,刻度只会显示当前存在的分类:

sns.barplot(x='color', y='count', data=filtered_df)
plt.title('Seaborn Bar Plot')
plt.show()

原理说明

remove_unused_categories()会修改category列的categories属性,只保留当前DataFrame中实际出现的类别。绘图工具(不管是pandas还是seaborn)都会读取这个更新后的类别集合来生成x轴刻度,因此不会再出现已移除的分类标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:25:18