FE01_OneHot-Python应用

Intro

  onehot的操作,解决两个问题:

  • 可以把列名关联上去
  • 可以处理之前的value

数据构造

import pandas as pd
df=pd.DataFrame({"id":[1,2,3,4],"grade":["A","B","A","C"],"class":[ "1班","2班","3班","1班"]})

pd.get_dummies

category_feature=["grade","class"]
pd.concat([df,pd.get_dummies(df[category_feature])],axis=1)
idgradeclassgrade_Agrade_Bgrade_Cclass_1班class_2班class_3班
01A1班100100
12B2班010010
23A3班100001
34C1班001100

pandas这个功能数据处理时方便,但是有个小问题,训练集和测试集是分开处理的,对测试集onehot时,列的顺序、是否出现训练集中没有的值,都是难以解决的问题。

OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
df_new = df.query("id!=4")
enc = OneHotEncoder(handle_unknown='ignore',sparse=False)
enc.fit(df_new[category_feature])
pd.DataFrame(enc.transform(df[category_feature]),columns=enc.get_feature_names_out())

grade_Agrade_Bclass_1班class_2班class_3班
01.00.01.00.00.0
10.01.00.01.00.0
21.00.00.00.01.0
30.00.01.00.00.0

id=4这条数据,grade=C,不属于A也不属于B则都是0,此时满足需求

                                2022-01-12 于南京市江宁区九龙湖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值