pandas中的get_dummies()函数

本文介绍了数据集中离散特征的两种编码方法:一种是对没有大小意义的特征采用one-hot编码;另一种是有大小意义的特征使用LabelEncoder思想进行数值映射,并提供了具体的Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

数据集中离散特征的编码分为两种情况:

  1. 离散特征的取值之间没有大小的意义(特征之间的欧式距离相同),比如color:[red,green],可以采用one-hot的方法
  2. 离散特征的的取值有大小的意义(特征之间的欧式距离不同),比如size:[X,XL,XXL],可以采用数值的映射{X:1,XL:2,XXL3},这种方式就是LabelEncoder()的思想

对离散特征的处理可以采用两种方式:

1、采用map()函数映射,处理欧式距离为0的特征-类似于One-Hot编码

import pandas as pd
df=pd.DataFrame([
    ['green','M',10.1,'class1'],
    ['red','L',13.5,'class2'],
    ['blue','XL',15,3,'class1']])

df.columns=['color','size','prize','class label']

size_mapping={
    'XL':3,
    'L':2,
    'M':1
    }
df['size']=df['size'].map(size_mapping)

class_mapping={
    label:idx for idx in enumerate(set(df['class label']))
    }

df['class label']=df['class label'].map(class_mapping)

说明:对于大小有意义的离散特征(欧式距离不相同),直接使用映射就可以了,{'XL':3,'L':2,'M':1}

    

2、直接使用pandas.get_dummies()函数处理

函数:get_dummies()

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

参数说明:

data : array-like, Series, or DataFrame
输入的数据
prefix : string, list of strings, or dict of strings, default None
get_dummies转换后,列名的前缀
columns : list-like, default None
指定需要实现类别转换的列名
dummy_na : bool, default False
增加一列表示空缺值,如果False就忽略空缺值
drop_first : bool, default False
获得k中的k-1个类别值,去除第一个
 print(pandas.get_dummies(df))

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### pandas `get_dummies` 函数详解 #### 基本功能描述 `pandas.get_dummies` 是 Pandas中的一个重要工具,主要用于处理分类数据。此函数可以将分类变量换成哑变量(也称为指示变量)。通过这种方式,每个类别的存在与否被表示为二进制值 0 或者 1 的新列[^1]。 #### 参数说明 - **data**: 输入的数据结构,通常是 Series 或 DataFrame 类型。 - **prefix**: 字符串或字符串列表,作为生成的新列名前缀,默认情况下会自动根据原始列名称加上下划线。 - **prefix_sep**: 新列名字之间的分隔符,默认是下划线 `_`. - **dummy_na**: 如果设为 True,则缺失值也会被视为有效的特征并创建对应的虚拟变量;默认为 False. - **columns**: 需要进行独热编码的具体列名组成的列表,如果未指定则会对所有的非数值类型的列执行操作。 - **sparse**: 是否返回稀疏矩阵形式的结果,默认不启用。 - **drop_first**: 若设置为 True 则移除第一个水平以减少冗余度,防止完全共线性问题的发生。 - **dtype**: 设置输出的 dtype 数据类型,默认无特殊设定即保持原样。 #### 实际应用案例展示 为了更好地理解如何使用这个函数,在这里给出一个具体的例子: 假设有一个关于学生的简单表格如下所示: ```python import pandas as pd students_df = pd.DataFrame({ 'Id': [302, 504, 708, 103, 303], 'Name': ["Mike", "Christine", "Rob", "Daniel", "Jennifer"], 'Sex': ['Male', 'Female', 'Male', 'Male', 'Female'], }) ``` 现在想要仅针对性别这一栏做独热编码换,可以通过以下方式实现: ```python students_df_dummies = pd.get_dummies(students_df, columns=["Sex"]) print("Original Dataframe:") print(students_df) print("\nDataframe after applying get_dummies on column Sex:") print(students_df_dummies) ``` 这段代码将会把原有的 `Sex` 列拆分成两个新的布尔列——分别是 `Sex_Female` 和 `Sex_Male`,其中每一行对应位置上的值取决于原来那里的性别标签是什么样的[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值