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

Pandas过滤Setosa后分类类别残留?求彻底移除方法

彻底移除Categorical列中未使用的setosa类别

问题出在species列是Categorical(分类)类型,这类数据的类别集合是预先定义好的,过滤行数据只会删除对应行,但不会自动清理掉不再出现的类别。要彻底移除setosa类别,有以下几种可行方法:

方法1:使用remove_unused_categories()清理未使用的类别

这是最直接的方式,针对已有的Categorical列执行清理操作:

df_iris['species'] = df_iris['species'].cat.remove_unused_categories()

执行后查看df_iris.species.cat.categories,就能确认setosa已被移除。

方法2:重新转换为Categorical类型

将列重新转换为分类类型,pandas会自动基于当前数据中的值生成新的类别集合:

df_iris['species'] = pd.Categorical(df_iris['species'])

方法3:从源头避免——先过滤再生成分类列

如果重新构建数据,可以先过滤掉setosa的数据,再生成分类列,从一开始就不包含setosa类别:

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris

iris = load_iris()
# 先过滤target为setosa的数据(target=0对应setosa)
mask = iris['target'] != 0
data = np.c_[iris['data'][mask], iris['target'][mask]]
columns = iris['feature_names'] + ['target']

df_iris = pd.DataFrame(data=data, columns=columns)
# 基于过滤后的target生成分类列
df_iris['species'] = pd.Categorical.from_codes(iris.target[mask], iris.target_names)
df_iris = df_iris.drop("target", axis=1)

以上三种方法都能彻底移除setosa类别,解决Seaborn可视化时出现的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27