Pandas DataFrame中使用Scikit-Learn OneHotEncoder

Pandas DataFrame中使用Scikit-Learn OneHotEncoder

在本文中,我们将介绍如何在Pandas DataFrame中使用Scikit-Learn的OneHotEncoder。OneHotEncoder用于将分类数据转换为计算机可读的格式。例如,我们有一个包含颜色、大小和形状的产品表格。我们需要将颜色、大小和形状列转换为计算机可读的二进制格式。

假设我们有一个包含“颜色”、“大小”和“形状”的产品表格。颜色列包含三个不同的颜色,大小列包含两个不同的大小,而形状列包含四个不同的形状。这样的表格看起来像这样:

颜色 大小 形状
Red Small Round
Blue Large Square
Green Small Round
Yellow Large Square

在这张表格中,每个分类列中的值都是彼此独立的,因此,我们可以使用OneHotEncoder将其转换为计算机可读格式。

阅读更多:Pandas 教程

准备数据

首先,我们需要将分类数据编码成数字。我们可以使用Pandas的factorize()函数将分类数据转化为数字。我们将在新的“颜色编码”、“大小编码”和“形状编码”列中保存这些数字。代码如下:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

products = pd.DataFrame({
    '颜色': ['Red', 'Blue', 'Green', 'Yellow'],
    '大小': ['Small', 'Large', 'Small', 'Large'],
    '形状': ['Round', 'Square', 'Round', 'Square']
})

# 将分类数据编码成数字
products['颜色编码'] = pd.factorize(products['颜色'])[0]
products['大小编码'] = pd.factorize(products['大小'])[0]
products['形状编码'] = pd.factorize(products['形状'])[0]

products

这将生成一个类似于下面表格的DataFrame:

颜色 大小 形状 颜色编码 大小编码 形状编码
Red Small Round 0 0 0
Blue Large Square 1 1 1
Green Small Round 2 0 0
Yellow Large Square 3 1 1

OneHot编码数据

现在,我们已经将分类数据编码为数字,我们可以使用OneHotEncoder将这些数字编码为二进制格式。代码如下:

# 创建OneHotEncoder对象
encoder = OneHotEncoder(categories='auto')

# 进行OneHot编码
encoded = encoder.fit_transform(products[['颜色编码', '大小编码', '形状编码']])

# 将编码后的数据转换成DataFrame并与原始数据合并
onehot = pd.DataFrame(encoded.toarray(), columns=encoder.get_feature_names())
result = pd.concat([products, onehot], axis=1)

result

这将生成一个类似于下面表格的DataFrame:

颜色 大小 形状 颜色编码 大小编码 形状编码 x0_0 x0_1 x0_2 x1_0 x1_1 x2_0 x2_1 x2_2 x2_3
Red Small Round 0 0 0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 Round | 0.0 | 1.0 | 0.0 | 0.0
Blue Large Square 1 1 1 0.0 1.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 | 1.0
Green Small Round 2 0 0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 | 0.0
Yellow Large Square 3 1 1 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 | 1.0

如您所见,OneHotEncoder将每个分类列拆分为多个列,并将每个可能的分类值编码为二进制格式。新列的数量等于每个分类列中的唯一值数量之和。

在这个例子中,颜色列有3个不同的值,大小列有2个不同的值,形状列有4个不同的值,所以我们合并了3 + 2 + 4 = 9列。每个分类值都有一个对应的新列,其中在元素所出现的位置处是1,其他位置都是0。

总结

在本文中,我们介绍了如何使用Scikit-Learn的OneHotEncoder将Pandas DataFrame中的分类数据转换为计算机可读的格式。我们首先使用了Pandas的factorize()函数将列编码为数字,然后使用OneHotEncoder将数字编码为二进制格式。这种转换可以使我们的数据适用于各种机器学习算法,以帮助我们更好地理解和预测我们的数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程