Python数据预处理中One-Hot编码的方法

背景

在进行数据建模时(有时也叫训练模型),我们需要先经过数据清洗、特征选择与特征构造等预处理步骤,然后构造一个模型进行训练,其中One-Hot编码属于数据清洗步骤里面。

One-Hot意义

在进行特征处理时,分类数据和顺序数据这种字符型变量,无法直接用于计算,那么就需要进行数值化处理。其中分类数据,比如一个特征包含红(R),绿(G),蓝(B)3个分类,那么怎么给这3个分类进行数值化处理呢,可以直接用1,2,3来表示吗,肯定不行,如果用1,2,3表示,那么3种颜色之间就会产生等级差异,本来他们之间应该是平等的,这时就需要进行one-hot编码(哑变量),如下图所示的转换

one-hot

实操数据

利用西瓜数据集(部分特征)为例进行实操,这个数据在网上都可下载到

西瓜数据集

读取西瓜数据到数据框里面

import pandas as pd

data = pd.read_excel('西瓜数据集.xlsx', sheet_name='西瓜')

data.head()
读取西瓜数据

常用方法

  • pandas里面的get_dummies方法
    这个方法是最简单,最直接的方法
#也可以用concat,join
data_onehot=data.merge(pd.get_dummies(data,columns=['色泽','触感']),on='编号')    

data_onehot.head()
pd.get_dummies
  • sklearn里面的One-HotEncoder方法
    利用One-HotEncoder进行转换
from sklearn.preprocessing import OneHotEncoder

one_hot=OneHotEncoder()

data_temp=pd.DataFrame(one_hot.fit_transform(data[['色泽','触感']]).toarray(),
             columns=one_hot.get_feature_names(['色泽','触感']),dtype='int32')
data_onehot=pd.concat((data,data_temp),axis=1)    #也可以用merge,join

data_onehot.head()
OneHotEncoder
  • 自定义函数方法
def OneHot(df,columns):
    df_new=df.copy()
    for column in columns:
        value_sets=df_new[column].unique()
        for value_unique in value_sets:
            col_name_new=column+'_'+value_unique
            df_new[col_name_new]=(df_new[column]==value_unique)
            df_new[col_name_new]=df_new[col_name_new].astype('int32')
    return df_new

data_onehot_def=OneHot(data,columns=['色泽','触感'])

data_onehot_def.head()
OneHot_def

历史相关文章

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据人阿多

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

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

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

打赏作者

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

抵扣说明:

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

余额充值