在 Pandas 中将分类变量转换为数值

Preet Sanghavi 2023年1月30日
  1. 在 Pandas 中将分类变量转换为数值变量
  2. 在 Pandas 中使用 apply 函数将分类变量转换为数值变量
在 Pandas 中将分类变量转换为数值

本教程探讨了在 Pandas 中将分类变量转换为数值变量的概念。

在 Pandas 中将分类变量转换为数值变量

本教程让我们了解如何以及为什么将某个变量从一个变量转换为另一个变量,特别是如何将分类数据类型变量转换为数值变量。

人们可能需要执行这样的操作,因为某种数据类型对于分析师的分析或解释任务可能不可行。在这种情况下,Pandas 帮助将某种类型的变量转换为另一种变量。

让我们了解如何执行如此复杂的操作。

但是,在开始之前,我们会创建一个虚拟 DataFrame 来使用。这里我们创建一个 DataFrame,即 df

我们在这个 df DataFrame 中添加了一些列和某些数据。我们可以使用以下代码执行此操作。

import pandas as pd

df = pd.DataFrame(
    {"col1": [1, 2, 3, 4, 5], "col2": list("abcab"), "col3": list("ababb")}
)

上面的代码创建了一个 DataFrame 以及一些条目。要查看数据中的条目,我们使用以下代码。

print(df)

上面的代码给出了以下输出。

   col1 col2 col3
0     1    a    a
1     2    b    b
2     3    c    a
3     4    a    b
4     5    b    b

正如我们所见,我们有 4 列和 5 行索引,从值 0 到值 4。查看我们的 DataFrame,我们可以看到我们的数据和其他字母中有某些数值。

我们现在的工作是将这些字母值转换为数值。

在 Pandas 中使用 apply 函数将分类变量转换为数值变量

设置好数据后,让我们直接开始我们的任务。第一步是可视化每列的类别。

其他编程语言中的这一类别也称为数据类型。我们使用下面的代码来查看每列关联的数据类型。

df["col2"] = df["col2"].astype("category")
df["col3"] = df["col3"].astype("category")
print(df.dtypes)

代码的输出如下图所示。

col1       	int64
col2    	category
col3    	category
dtype: object

如我们所见,我们有上表中列出的每一列的数据类型。我们有数据类型为 int64col1categorycol2col3 也类似于 col2

现在我们知道了每一列的数据类型,我们可以继续下一步。

下一步是找到分类列并将它们一起列出。这在我们的操作中并不困难,但却是极其重要的一步,因为它可以帮助我们了解哪些列将被转换为数值变量。

cat_columns = df.select_dtypes(["category"]).columns

如代码所示,我们获取所有 dtypes 等于 category 的列。同样,我们可以根据我们的要求获取任何 dtype

现在我们已经找到了所有的分类列,让我们将它们可视化。我们可以使用以下代码执行此操作。

print(cat_columns)

该代码获取以下输出。

Index(['col2', 'col3'], dtype='object')

这将指示与分类列关联的 dtype

最后一步是将这些分类变量转换为数值变量。我们可以使用以下代码执行此操作。

df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)

该代码获取以下输出。

   col1  col2  col3
0     1     0     0
1     2     1     1
2     3     2     0
3     4     0     1
4     5     1     1

我们可以使用代码 print(df) 获得输出。

如上面的输出所示,我们已经成功地将字母转换为数值,从而帮助我们将分类变量转换为数值变量。

因此,使用 apply 函数并获取分类列,我们已将 DataFrame 中的变量从分类转换为数值。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub