使用pandas的get_dummies函数对分类特征进行OneHot编码和哑编码

本文深入探讨了OneHot编码和哑编码的概念及其在数据预处理中的应用,详细比较了两种编码方式的异同,包括编码长度的区别以及如何在实际场景中选择合适的编码方式。

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

常用参数解释:
    data: DataFrame或Series对象
    prefix: 编码后特征名称的前缀
    prefix_sep: 编码后特征名称的前缀,默认使用“_”进行分隔
    columns: 默认为None,默认对data里面的所有object对象和category对象进行编码,如果指定columns,则只对指定的特征进行编码,但是必须保证columns的长度与prefix的长度一致
    drop_first: 默认为False,表示是否丢弃OneHot编码后的第一列,因为丢弃的一列可以通过其他剩余的k-1列计算得到,也就变成了哑变量编码


1、构造带有分类特征的DataFrame

2、对分类特征进行OneHot编码

3、对分类特征进行哑编码


OneHot编码和哑编码的区别简述:

1、OneHot编码的编码长度和分类特征的类别数相同

2、哑编码的编码长度是分类特征的类别数减1

 

OneHot编码和哑编码的使用异同见参考文档

 


 

`pandas` 的 `get_dummies` 函数可将分类变量转换为变量(one-hot 编码),该函数能把拥有不同值的变量转换为 0/1 数值,以此区分不同类别。其函数原型如下: ```python pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None) ``` 下面通过几个示例来展示如何使用函数: #### 示例 1:简单 DataFrame 的 one-hot 编码 ```python import pandas as pd df = pd.DataFrame({'gender':['m','f','m','f','m','f','n']}) df_onehot = pd.get_dummies(df) print(df_onehot) ``` 在这个示例中,`get_dummies` 函数自动将 `gender` 列转换为多个变量列,每个列代表一个性别类别,值为 0 或 1,表示该行是否属于该类别[^4]。 #### 示例 2:多列 DataFrame 的 one-hot 编码 ```python import pandas as pd import numpy as np contents = { "name": ['Bob', 'LiSa', 'Mary', 'Alan'], "ID": [1, 2, 3, 4], "age": [np.nan, 28, 38 , 48 ], "born": [pd.NaT, pd.Timestamp("1990-01-01"), pd.Timestamp("1980-01-01"), pd.Timestamp("1970-01-01")], "sex": ['男', '女', '女', '男'], "hobbey": ['打篮球', '打羽毛球', '打乒乓球', '打篮球'] } df = pd.DataFrame(contents) # 自动找出分类变量(字符串类型),接着进行变量处理 temp_DF = pd.get_dummies(df) print(temp_DF.head()) ``` 此示例中,`get_dummies` 函数会自动识别 DataFrame 中的分类变量(字符串类型),并将它们转换为变量。最终的 `temp_DF` 包含了原始数据转换后的变量列[^3]。 #### 示例 3:指定列进行 one-hot 编码 ```python import pandas as pd xiaoming = pd.DataFrame([1,2,3], index=['yellow','red','blue'], columns=['hat']) hat_ranks = pd.get_dummies(xiaoming['hat'], prefix='hat') print(hat_ranks) ``` 在这个例子中,只对 `xiaoming` DataFrame 中的 `hat` 列进行 one-hot 编码,并使用 `prefix` 参数为生成变量列添加前缀[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值