解决get_dummies得到结果全部是布尔值的问题

  今天对表格类型的数据集做数据处理的时候,用pandas中的get_dummies()方法对离散的字符型特征做独热编码处理,碰到一个问题:编码出来的结果不是0、1,全是布尔型的True和False,查了网上很多资料,解决问题后特此记录。
  one-hot编码是对离散的特征数据进行特征数字化的常用方法,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
  比如对性别特征:[“男”,“女”]进行One-Hot编码,按照N位状态寄存器来对N个状态进行编码的原理,处理后应该是这样的(有两种特征,所以N=2):[10,01],就是把原来的特征转化成了n个二元数值型的特征,原来的特征有多少种就有多少位,是哪种特征该位置上就是1,其他位置就是0,这样就可以解决分类器不好处理属性数据(字符型)的问题。
  get_dummies是pandas库实现one-hot编码的方式。官方文档:pandas.get_dummies

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

举例:

import pandas as pd
df = pd.DataFrame([  
            ['zhang' , 'A'],   
            ['wang'   , 'B']])  

df.columns = ['name',  'gender'] 
pd.get_dummies(df) 

  这样就可以对df进行one-hot编码,也可以只对表格中的某几种特征进行one-hot编码:

pd.get_dummies(df,columns=['name','gender'])

  只要指定columns列表就行了,这里要注意一个问题,就是编码完之后得到的表里只有你编码的那几种特征,你要在原来的数据表里把这几种特征删了,在把get_dummies的结果加进去。
  如果你的版本比较新,你可能会得到这么一个结果:
请添加图片描述  查了资料,原因:

get_dummies函数在pandas1.6.0版本之前返回numpy.uint8,无符号八位整数,在1.6.0版本开始更改为返回numpy.bool_,numpy布尔值。
该修改由#45848提出,认为返回值是无符号整型变量将导致难以跟踪的错误,于#48022中完成修复。

  但是这样子给模型训练有可能就会报错,如果你需要int型的,你需要自己指定:

pd.get_dummies(df,columns=['name','gender'],dtype=int)

  结果:
请添加图片描述  问题解决。

      

  更新:有些特征值的取值太多会导致ont-hot编码后的特征矩阵太大无法计算,书接下文:解决one-hot编码时特征值太多导致矩阵维度太大的问题

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一本糊涂张~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值