在本文中,我们将探讨如何利用Pandas对分类数据进行独热(One-Hot)编码。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
一、什么是独热编码
独热编码是一种数据预处理步骤,用于将分类值转换为兼容的数值表示。
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 | 移除分类标签的第一个级别 |
【pandas.get_dummies()
】:https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html
为了更好地理解这个函数,让我们来对这个虚拟数据集进行一次独热编码。
2.1 对分类列进行独热编码
我们使用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 |
当想要对布尔列进行独热编码时,问题就出现了。它也创建了两个新列。
2.2 对二进制列进行独热编码
df_encoded = pd.get_dummies(df, columns=[bool_col, ])
bool_col_False | bool_col_True |
---|---|
0 | 1 |
1 | 0 |
0 | 1 |
1 | 0 |
不必增加一列,而是可以只有一列,其中True
被编码为1
,False
被编码为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 |
分类值和布尔值已转换为可以作为机器学习算法输入的数值。
推荐书单
IT BOOK 多得(点击查看5折活动书单)
https://u.jd.com/psx2y1M
《Pandas1.x实例精解》
《Pandas1.x实例精解》详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。《Pandas1.x实例精解》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
《Pandas1.x实例精解》https://item.jd.com/13255935.html
精彩回顾
微信搜索关注《Python学研大本营》,加入读者群
访问【IT今日热榜】,发现每日技术热点