Pandas 将分类数据转换为数字

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将分类数据转换为数字。我们使用了一个超市销售记录的虚拟数据集来演示这一过程。我们学习了分类数据和独热编码的基本概念,并提供了相应的代码示例。当机器学习项目需要处理分类数据时,这些技能非常重要,因此务必掌握。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程