忽略大小写重新定义Pandas分类变量的类别
解决分类变量标准化(无replace)的问题
报错原因
你尝试直接将标准化后的类别列表赋值给Categorical的categories属性时,由于多个原始类别(如Male、MALE)标准化后都是同一个值(male),导致列表中出现重复的类别名称,而pandas要求Categorical的类别必须唯一,因此触发Categorical categories must be unique错误。
方案一:批量标准化后转分类(高效首选)
直接对所有元素做小写标准化,再转为Categorical类型,无需手动枚举变体,适合大规模数据集:
from pandas import Series # 创建数据集 df = Series(["male", "female","Male", "FEMALE", "MALE", "MAle"], name = "NEW_TEST") # 统一转为小写后设置为分类类型 df = df.str.lower().astype("category") # 验证结果 print(df) print(df.cat.categories) # 输出:['female', 'male']
方案二:通过类别映射重命名后合并
如果需要保留原始类别到标准化类别的映射逻辑,可以先创建映射字典,重命名类别后再合并重复项:
from pandas import Series # 创建数据集 df = Series(["male", "female","Male", "FEMALE", "MALE", "MAle"], dtype="category", name = "NEW_TEST") # 生成原始类别到小写类别的映射 category_mapping = {cat: cat.lower() for cat in df.cat.categories} # 重命名类别后,重新转为Categorical以自动合并重复项 df = df.cat.rename_categories(category_mapping) df = Series(df, dtype="category") # 验证结果 print(df) print(df.cat.categories) # 输出:['female', 'male']
两种方案均未使用replace方法,而是利用pandas的向量化操作或Categorical内置功能实现类别统一,处理效率更高,适合大规模数据集。
内容的提问来源于stack exchange,提问作者Daniele Mauriello
相关产品推荐
相关产品推荐

