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将数字编码为二进制格式。这种转换可以使我们的数据适用于各种机器学习算法,以帮助我们更好地理解和预测我们的数据。
极客教程