pandas.get_dummies 的用法

本文介绍了如何使用pandas中的get_dummies函数实现one-hot编码,包括对数据进行转换的基本操作及示例,如对整个DataFrame或指定列应用get_dummies,并将其结果合并回原始数据集。

get_dummies 是利用pandas实现one hot encode的方式。详细参数请查看官方文档 

pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)[source]
1
例子:
import pandas as pd
df = pd.DataFrame([  
            ['green' , 'A'],   
            ['red'   , 'B'],   
            ['blue'  , 'A']])  

df.columns = ['color',  'class'] 
pd.get_dummies(df) 

get_dummies 前: 
 
get_dummies 后: 


上述执行完以后再打印df 出来的还是get_dummies 前的图,因为你没有写

df = pd.get_dummies(df)

可以对指定列进行get_dummies
pd.get_dummies(df.color)


将指定列进行get_dummies 后合并到元数据中
df = df.join(pd.get_dummies(df.color))

--------------------- 
 

<think> 我们被要求解释pandas库中的get_dummies()函数的使用方法。参考之前提供的引用,我们可以总结如下: get_dummies()函数用于将分类变量转换为哑变量/指示变量(dummy/indicator variables)。它常用于机器学习中的特征处理,将类别型变量转换为0/1的二进制列。 函数语法: pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None) 参数解析(根据引用[1][3][4][5]): - data: 输入数据,可以是DataFrame或Series。 - prefix: 用于新列名的前缀。可以是字符串、字符串列表或字典(为每列指定不同的前缀)。默认为None,此时使用原列名。 - prefix_sep: 前缀和类别值之间的分隔符,默认为下划线'_'。 - dummy_na: 布尔值,默认为False。如果为True,则增加一列表示缺失值(NaN)。 - columns: 指定需要转换的列名列表。默认为None,表示转换所有类别型变量(非数值型的列)。 - sparse: 布尔值,默认为False。是否返回稀疏矩阵(Sparse DataFrame)。 - drop_first: 布尔值,默认为False。如果为True,则删除每个分类变量的第一个类别(避免多重共线性,在回归中常用)。 - dtype: 新列的数据类型,默认为np.uint8。 使用步骤: 1. 导入pandas:`import pandas as pd` 2. 准备数据:通常是一个包含类别型变量的DataFrame。 3. 调用`pd.get_dummies()`,传入数据和其他参数。 示例: 假设有以下DataFrame: ```python import pandas as pd df = pd.DataFrame({ 'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': [1, 2, 3] }) ``` 1. 基本转换: ```python pd.get_dummies(df) ``` 结果: C A_a A_b B_a B_b B_c 0 1 1 0 0 1 0 1 2 0 1 1 0 0 2 3 1 0 0 0 1 注意:数值列C被保留,非数值列A和B被转换成多个哑变量列。 2. 指定列转换(columns): ```python pd.get_dummies(df, columns=['A']) ``` 结果: B C A_a A_b 0 b 1 1 0 1 a 2 0 1 2 c 3 1 0 # 注意:这里第三行A列是'a',所以A_a为1,A_b为0(因为没有'b',所以为0) 3. 使用前缀(prefix)和前缀分隔符(prefix_sep): ```python pd.get_dummies(df, prefix=['col1', 'col2']) ``` 结果: C col1_a col1_b col2_a col2_b col2_c 0 1 1 0 0 1 0 1 2 0 1 1 0 0 2 3 1 0 0 0 1 注意:这里给A列加了前缀'col1',B列加了前缀'col2'。 4. 处理缺失值(dummy_na): ```python df_nan = pd.DataFrame({'D': ['a', 'b', np.nan]}) pd.get_dummies(df_nan, dummy_na=True) ``` 结果: D_a D_b D_nan 0 1 0 0 1 0 1 0 2 0 0 1 5. 删除第一个类别(drop_first)以避免多重共线性: ```python pd.get_dummies(df, drop_first=True) ``` 结果: C A_b B_a B_c 0 1 0 0 0 # 注意:A列的第一个类别是'a',被删除了,所以只保留A_b;同理B列删除了第一个类别'b'(按字母顺序),保留B_a和B_c。 1 2 1 1 0 2 3 0 0 1 注意:drop_first=True会删除每个分类变量的第一个类别(按字母排序)。 6. 设置数据类型(dtype): ```python pd.get_dummies(df, dtype=float) ``` 注意事项(引用[2]): - 当类别变量取值较多时,会产生大量新列,导致维度灾难,需谨慎使用。 - 在回归模型中,通常需要设置drop_first=True以避免多重共线性问题。 - 可以结合缺失值处理(dummy_na)来保留缺失信息。 相关问题: 1. get_dummies()函数处理数值型和类别型列的方式有什么不同? 2. 在机器学习模型中使用独热编码时,为什么有时需要删除第一个类别? 3. 如何处理大数据集下的高基数分类变量(即类别取值非常多)? 4. 如何将get_dummies()与pandas的cut/qcut函数结合使用? 5. 使用get_dummies()后如何恢复原始分类变量? 注意:在回答中,我们引用了多个引用,需要在适当位置标注引用标识。 </think> # Pandasget_dummies()函数详解 `pd.get_dummies()`是Pandas中处理分类变量的核心函数,它将**类别型数据转换为独热编码(One-Hot Encoding)**,便于机器学习算法处理。下面详细介绍其使用方法:[^1][^3][^4] ## 函数语法 ```python pandas.get_dummies( data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None ) ``` ## 核心参数解析 | 参数 | 说明 | 默认值 | 示例 | |------|------|--------|------| | `data` | 输入数据(DataFrame或Series) | 必需 | `df` | | `prefix` | 新列名前缀(字符串/列表/字典) | None | `'cat'` | | `prefix_sep` | 前缀与类别的分隔符 | `'_'` | `'-'` | | `dummy_na` | 是否为NaN创建新列 | False | True | | `columns` | 指定要转换的列 | None | `['color', 'size']` | | `drop_first` | 是否删除第一个类别 | False | True | | `dtype` | 输出数据类型 | uint8 | float | ## 基本使用示例 ### 1. 基础转换 ```python import pandas as pd df = pd.DataFrame({'color': ['红', '蓝', '绿', '蓝']}) pd.get_dummies(df) ``` 输出: ``` color_红 color_蓝 color_绿 0 1 0 0 1 0 1 0 2 0 0 1 3 0 1 0 ``` ### 2. 添加前缀 ```python pd.get_dummies(df, prefix='COL') ``` 输出: ``` COL_红 COL_蓝 COL_绿 0 1 0 0 1 0 1 0 2 0 0 1 3 0 1 0 ``` ### 3. 处理缺失值 ```python df_nan = pd.DataFrame({'size': ['S', 'M', None, 'L']}) pd.get_dummies(df_nan, dummy_na=True) ``` 输出: ``` size_L size_M size_S size_nan 0 0 0 1 0 1 0 1 0 0 2 0 0 0 1 3 1 0 0 0 ``` ### 4. 避免多重共线性 ```python pd.get_dummies(df, drop_first=True) ``` 输出: ``` color_蓝 color_绿 0 0 0 1 1 0 2 0 1 3 1 0 ``` ## 高级应用场景 ### 1. 多列同时转换 ```python df_multi = pd.DataFrame({ 'color': ['红', '蓝', '绿'], 'size': ['S', 'M', 'L'] }) pd.get_dummies(df_multi, columns=['color', 'size']) ``` ### 2. 自定义前缀映射 ```python prefix_mapping = {'color': 'COL', 'size': 'SZ'} pd.get_dummies(df_multi, prefix=prefix_mapping) ``` ### 3. 与数值列共存 ```python df_num = pd.DataFrame({ 'price': [10, 20, 30], 'category': ['A', 'B', 'A'] }) pd.get_dummies(df_num) ``` ## 注意事项 1. **高基数问题**:当类别过多时会导致维度爆炸,建议先进行类别合并[^2] 2. **内存管理**:使用`sparse=True`可节省内存(返回稀疏矩阵)[^4] 3. **回归模型**:线性模型中务必设置`drop_first=True`避免完全多重共线性[^5] 4. **数据类型**:通过`dtype`控制输出类型可节省内存(如dtype=bool) ## 最佳实践 ```python # 典型预处理流程 processed = ( df .filter(['category', 'size']) # 选择需要转换的列 .pipe(pd.get_dummies, prefix_sep=':', drop_first=True, dummy_na=True) ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值