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
相关产品推荐
相关产品推荐

