如何在pandas DataFrame中实现指定规则的自定义类别编码?
解决方案
方法1:字典映射(最直观高效)
直接定义水果到编码的映射关系,用map完成转换,不在映射中的值统一设为5:
import pandas as pd # 定义映射规则(注意匹配数据中水果的实际拼写) fruit_code = { 'Apple': 1, 'Pineapple': 2, 'Orange': 3, 'Strawberry': 4 # 示例中为Strawberrry,需根据真实数据调整拼写 } # 执行映射,缺失值(不在字典中的水果)填充为5并转为整数 df['Master'] = df['Master'].map(fruit_code).fillna(5).astype(int)
方法2:批量条件替换
适合需要明确控制每个条件的场景,先统一设为默认值5,再逐个替换目标水果:
import pandas as pd # 初始化所有值为5 df['Master'] = 5 # 替换指定水果的编码 df.loc[df['Master'] == 'Apple', 'Master'] = 1 df.loc[df['Master'] == 'Pineapple', 'Master'] = 2 df.loc[df['Master'] == 'Orange', 'Master'] = 3 df.loc[df['Master'] == 'Strawberry', 'Master'] = 4
方法3:分类类型编码
如果需要保留分类语义,可利用Pandas的分类类型实现编码:
import pandas as pd # 先将非目标水果统一替换为'Other' target_fruits = {'Apple', 'Pineapple', 'Orange', 'Strawberry'} df['Master'] = df['Master'].apply(lambda x: x if x in target_fruits else 'Other') # 定义分类顺序并转换为编码 df['Master'] = pd.Categorical(df['Master'], categories=['Apple', 'Pineapple', 'Orange', 'Strawberry', 'Other'], ordered=True).cat.codes + 1
注意:如果数据中水果存在拼写差异(比如示例里的
Strawberrry),请确保映射字典或条件判断中的拼写与数据完全一致,否则会匹配失败。
内容的提问来源于stack exchange,提问作者Scope
相关产品推荐
相关产品推荐

