特征提取pd.get_dummies() 详解(One-Hot Encoding)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特征提取pd.get_dummies() 详解(One-Hot Encoding)相关的知识,希望对你有一定的参考价值。

Pandas.get_dummies 用法简单介绍

Pandas 中的 get_dummies 方法主要用于对类别型特征做 One-Hot 编码(独热编码)。

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

参数说明:

  • 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个类别值,去除第一个。

更多请参考:Link

主要参数介绍

data

data : array-like, Series, or DataFrame

传入的 data 为需要进行 One-Hot 编码的数据,包括 array-like, Series, or DataFrame 等类型数据。

对于类别型(category)特征,使用get_dummies(),结果如下:

import pandas as pd

df = pd.DataFrame('gender':['m','f','m','f','m','f','n'])
df_onehot = pd.get_dummies(df)
df_onehot
gender_fgender_mgender_n
0010
1100
2010
3100
4010
5100
6001

若DataFrame中有数值型特征(columns),数值型column则保留原始值,如下例的 id 列:

data_df = pd.DataFrame('id':[1,2,3,4,5,6,7],'gender':['m','f','m','f','m','f','n'])
df_onehot = pd.get_dummies(data_df)
df_onehot 
idgender_fgender_mgender_n
01010
12100
23010
34100
45010
56100
67001
  • 上面两个简单的例子不难发现,经过 get_dummies() 编码后新生成的列,列名为 “原列名_类别”,例如 " gender_f "。
  • 当然,新列的命名方式也是可以自定义的。
  • 如下,设置 prefix 即可:

prefix

prefix: string, list of strings, or dict of strings, default None

用于附加DataFrame列名的字符串。
在DataFrame上调用get_dummies时,传递长度等于列数的列表。或者,前缀可以是将列名映射到前缀的字典。

data_df = pd.DataFrame('id':[1,2,3,4,5,6,7],'gender':['m','f','m','f','m','f','n'])
df_onehot = pd.get_dummies(data_df, prefix ='gen')
df_onehot 
idgen_fgen_mgen_n
01010
12100
23010
34100
45010
56100
67001

当然,不只是前缀可以做更改,分隔符也可以自己设置,如下,设置 prefix_sep 即可。

prefix_sep

prefix_sep: string, default ‘_’

如果附加前缀,则使用分隔符/分隔符。或作为前缀传递列表或字典。

data_df = pd.DataFrame('id':[1,2,3,4,5,6,7],'gender':['m','f','m','f','m','f','n'])
df_onehot = pd.get_dummies(data_df, prefix ='gen', prefix_sep = '/')
df_onehot 
idgen/fgen/mgen/n
01010
12100
23010
34100
45010
56100
67001

其他参数(Parameters)

  • dummy_na: bool, default False
      如果忽略False NaNs,则添加一列来指示NaNs。
  • columns: list-like, default None
      要编码的DataFrame中的列名称。 如果列为None,则将转换具有object或category dtype的所有列。
  • abs sparse: bool, default False
      是否应该使用SparseArray (True)或常规NumPy数组(False)来支持用dummy编码的列。
  • drop_first: bool, default False
      Whether to get k-1 dummies out of k categorical levels by removing the first level.
      New in version 0.18.0.
  • dtype: dtype, default np.uint8
      Data type for new columns. Only a single dtype is allowed.
      New in version 0.23.0.

Pandas.get_dummies 的用法

import pandas as pd

df = pd.DataFrame([  
            ['green' , 'A'],   
            ['red'   , 'B'],   
            ['blue'  , 'A']])  

df.columns = ['color',  'class'] 
pd.get_dummies(df) 
color_bluecolor_greencolor_redclass_Aclass_B
001010
100101
210010

可以对指定列进行get_dummies

pd.get_dummies(df.color)
bluegreenred
0010
1001
2100

将指定列进行get_dummies 后合并到元数据中

df.join(pd.get_dummies(df.color))
colorclassbluegreenred
0greenA010
1redB001
2blueA100

参考: Link


加油!

感谢!

努力!

以上是关于特征提取pd.get_dummies() 详解(One-Hot Encoding)的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas:将 2,000,000 个 DataFrame 行转换为二进制矩阵 (pd.get_dummies()) 而不会出现内存错误?

sklearn LabelEncoder 和 pd.get_dummies 有啥区别?

想知道 pd.factorize、pd.get_dummies、sklearn.preprocessing.LableEncoder 和 OneHotEncoder 之间的区别 [关闭]

pd.get_dummies 是单热编码吗?

如何做 pd.get_dummies 或其他方式?

pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有啥区别? [复制]