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

忽略大小写重新定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:40:25