Python Pandas实现带百分号分类变量转数值型变量方法
Pandas分类字段转数值型表示实现方案
前置示例数据集构造
首先按照题设逻辑构造测试数据集,注意需要先将cotton_pct字段转换为分类类型,匹配题设的字段类型前提:
import pandas as pd dt = {'tensile_strength': ['15%', '15%', '20%', '20%', '25%', '25%', '30%', '30%'], 'cotton_pct': [7, 7, 12, 17, 14, 18, 19, 25]} mydt = pd.DataFrame(dt, columns = ['tensile_strength', 'cotton_pct']) # 将目标字段转为分类类型 mydt['cotton_pct'] = mydt['cotton_pct'].astype('category')
具体实现方式
根据业务需求不同,有两种常用实现路径:
场景1:需要为每个独立分类分配唯一整数标识(用于建模等需要数值入参的场景)
直接使用pandas分类类型自带的.cat.codes属性即可,该属性会为每个分类值返回从0开始的整数编码,自动完成去重映射:# 新建列存储分类对应的整数编码 mydt['cotton_pct_cat_code'] = mydt['cotton_pct'].cat.codes注意:默认编码是按照分类值的字典序分配的,如果需要按照自定义规则排序编码,可以先指定分类顺序再生成编码,例如要按cotton_pct数值升序对应编码从小到大:
# 按原始数值升序设置有序分类 mydt['cotton_pct'] = mydt['cotton_pct'].cat.reorder_categories( sorted(mydt['cotton_pct'].unique()), ordered=True ) mydt['cotton_pct_ordered_code'] = mydt['cotton_pct'].cat.codes场景2:需要取回分类字段对应的原始数值(即把分类类型还原为原本的整数/浮点数值类型)
直接做类型转换即可:mydt['cotton_pct_original_num'] = mydt['cotton_pct'].astype(int)
结果验证
执行完上述操作后打印数据集,可以看到新增的数值字段已经生成:
print(mydt)
输出结果:
tensile_strength cotton_pct cotton_pct_cat_code cotton_pct_ordered_code cotton_pct_original_num 0 15% 7 0 0 7 1 15% 7 0 0 7 2 20% 12 1 1 12 3 20% 17 3 3 17 4 25% 14 2 2 14 5 25% 18 4 4 18 6 30% 19 5 5 19 7 30% 25 6 6 25
内容的提问来源于stack exchange,提问作者Marie B
相关产品推荐
相关产品推荐

