一文读懂Pandas中独热编码

什么是独热编码

独热编码是一种数据预处理步骤,用于将分类值转换为兼容的数值表示。

categorical_column bool_col col_1 col_2 label
value_A True 9 4 0
value_B False 7 2 0
value_D True 9 5 0
value_D False 8 3 1
value_D False 9 0 1
value_D False 5 4 1
value_B True 8 1 1
value_D True 6 6 1
value_C True 0 5 0

例如,在这个虚拟数据集中,分类列具有多个字符串值。许多机器学习算法要求输入数据为数值形式,因此需要某种方法将此数据属性转换为与此类算法兼容的形式,本文将分类列分解为多个二进制值列。 

使用Pandas库进行独热编码

首先,将.csv文件或任何其他相关文件读入Pandas数据帧。

df = pd.read_csv("data.csv")

为了检查唯一值并更好地理解数据,可以使用以下Panda函数。

df['categorical_column'].nunique()
df['categorical_column'].unique()

对于这些虚拟数据,函数会返回以下输出结果:

>>> 4
>>> array(['value_A', 'value_C', 'value_D', 'value_B'], dtype=object)

对于分类列,可以将其分解为多个列,为此本文使用pandas.get_dummies()方法。它需要以下参数:

参数
data:类似数组、Series或DataFrame Pandas的原始数据帧对象
columns:类似列表,默认为None 要进行独热编码的分类列列表
drop_first:布尔值,默认为False 移除分类标签的第一个级别

为了更好地理解这个函数,让我们来对这个虚拟数据集进行一次独热编码。

  • 对分类列进行独热编码

我们使用get_dummies方法,并将原始数据帧作为数据输入,在columns中,我们传入一个只包含categorical_column标题的列表。

df_encoded = pd.get_dummies(df, columns=['categorical_column', ])

以下命令删除了categorical_column,并为每个唯一值创建了一个新列。因此,单个分类列被转换为4个新列,其中只有一个列的值为1,其他3个列的值为0,这就是为什么它被称为独热编码。

categorical_column_value_A categorical_column_value_B categorical_column_value_C categorical_column_value_D
1 0 0 0
0 1 0 0
0 0 0 1
0 0 0 1
0 0 0 1
0 0 0 1
0 1 0 0
0 0 0 1
0 0 1 0
0 0 0 1

当想要对布尔列进行独热编码时,问题就出现了,其创建了两个新列。

  • 对二进制列进行独热编码
df_encoded = pd.get_dummies(df, columns=[bool_col, ])
bool_col_False bool_col_True
0 1
1 0
0 1
1 0

不必增加一列,而是可以只有一列,其中True被编码为1False被编码为0。为了解决这个问题,可以使用drop_first参数。

df_encoded = pd.get_dummies(df, columns=['bool_col'], drop_first=True)
bool_col_True
1
0
1
0

结论

对虚拟数据集进行独热编码,最终结果如下所示:

col_1 col_2 bool A B C D label
9 4 1 1 0 0 0 0
7 2 0 0 1 0 0 0
9 5 1 0 0 0 1 0
8 3 0 0 0 0 1 1
9 0 0 0 0 0 1 1
5 4 0 0 0 0 1 1
8 1 1 0 1 0 0 1
6 6 1 0 0 0 1 1
0 5 1 0 0 1 0 0
1 8 1 0 0 0 1 0

分类值和布尔值已转换为可以作为机器学习算法输入的数值。

你可能感兴趣的:(机器学习与深度学习,pandas)