Pandas 将分类数据转换为数字
在本文中,我们将介绍如何使用Pandas将特征编码为数字。这种转换经常用于机器学习项目中,因为许多算法无法处理分类数据。解决这个问题的方法之一是将分类数据转换为数字。Pandas库提供了一些内置函数,可以轻松地将分类数据转换为数字。
阅读更多:Pandas 教程
数据集说明
在本文中,我们将使用一个完全由数字和分类特征组成的虚拟数据集。该数据集代表了一个超市的销售记录,包括客户编号,购买日期,购买产品和产品类别。
客户编号 | 购买日期 | 购买产品 | 产品类别 |
---|---|---|---|
1 | 2022-01-01 | 牛奶 | 生鲜 |
1 | 2022-01-01 | 面包 | 杂货 |
2 | 2022-01-02 | 牛奶 | 生鲜 |
2 | 2022-01-02 | 面包 | 杂货 |
2 | 2022-01-02 | 糖果 | 零食 |
Pandas中的分类数据
在Pandas中,分类数据是一种特殊的数据类型。它们只占用固定数量的内存,而且转换为数字通常比字符串更有效。
Pandas中的分类数据可以使用pd.Categorical
函数创建。例如,以下代码将创建一个名为categories
的分类数据对象,其中包含三个值:“生鲜”,“杂货”和“零食”。
import pandas as pd
categories = pd.Categorical(['生鲜', '杂货', '零食'])
将分类数据转换为数字
接下来,我们将在数据集中使用分类数据,并将它们转换为数字。使用Pandas中的pd.factorize
函数可以将分类数据转换为数字。该函数的返回值是两个数组,其中一个包含转换后的数字,另一个包含原始的分类数据。
以下代码将演示如何将数据集中的“产品类别”
列转换为数字:
import pandas as pd
data = pd.read_csv('sales.csv') # 读取数据集
# 建立新的“产品类别”列,为其分配一个category类型
data['产品类别'] = pd.Categorical(data['产品类别'])
# factorize()函数,将“产品类别”列转换为数字
data['产品类别编号'] = data['产品类别'].cat.codes
运行上述代码后,数据集将包含一个名为“产品类别编号”的新列,其中包含数字版本的“Product Category”值。
客户编号 | 购买日期 | 购买产品 | 产品类别 | 产品类别编号 |
---|---|---|---|---|
1 | 2022-01-01 | 牛奶 | 生鲜 | 0 |
1 | 2022-01-01 | 面包 | 杂货 | 1 |
2 | 2022-01-02 | 牛奶 | 生鲜 | 0 |
2 | 2022-01-02 | 面包 | 杂货 | 1 |
2 | 2022-01-02 | 糖果 | 零食 | 2 |
使用独热编码
在某些情况下,将分类数据转换为数字的方法可能会引入偏好或重要性的错误解释,因为数字之间的关系可能毫无意义。更好的方法是使用独热编码(One-Hot Encoding)。该方法将每个分类值转换为一个布尔值,表示此值是否出现,并使输出在分类之间更具有可比性。
可以使用Pandaspd.get_dummies
函数来执行独热编码。以下代码将“产品类别”
列转换为独热编码:
import pandas as pd
data = pd.read_csv('sales.csv') # 读取数据集
# get_dummies()函数,执行独热编码转换
dummies = pd.get_dummies(data['产品类别'], prefix='产品类别')
# 将新的独热编码数据添加到数据集中
data = pd.concat([data, dummies], axis=1)
运行该代码后,数据集将包含三个新列,每个列代表一个产品类别。如果某个记录中的“产品类别”是“生鲜”,则该记录的“产品类别_生鲜”列的值为1,否则为0。
客户编号 | 购买日期 | 购买产品 | 产品类别 | 产品类别_生鲜 | 产品类别_杂货 | 产品类别_零食 |
---|---|---|---|---|---|---|
1 | 2022-01-01 | 牛奶 | 生鲜 | 1 | 0 | 0 |
1 | 2022-01-01 | 面包 | 杂货 | 0 | 1 | 0 |
2 | 2022-01-02 | 牛奶 | 生鲜 | 1 | 0 | 0 |
2 | 2022-01-02 | 面包 | 杂货 | 0 | 1 | 0 |
2 | 2022-01-02 | 糖果 | 零食 | 0 | 0 | 1 |
总结
在本文中,我们介绍了如何使用Pandas将分类数据转换为数字。我们使用了一个超市销售记录的虚拟数据集来演示这一过程。我们学习了分类数据和独热编码的基本概念,并提供了相应的代码示例。当机器学习项目需要处理分类数据时,这些技能非常重要,因此务必掌握。