Pandas 将数据框中的分类数据转换

Pandas 将数据框中的分类数据转换

在本文中,我们将介绍如何使用Pandas将数据框(DataFrame)中的分类(categorical)数据转换。分类数据通常被储存在文本格式中,这可以给我们带来丰富的信息和价值。然而,这样的数据有劣势,使用分类数据的许多方法都有很多限制,需要更多的计算资源,数据的可读性也更低下。

那么我们怎样将分类数据转换成机器可以理解的数字数据呢?Pandas提供了一系列的方法来做这件事。在本文中,我们将介绍这些方法并通过示例来说明。

阅读更多:Pandas 教程

将分类数据转换成数字数据

首先,我们需要将分类数据能够被机器处理的数字数据。对于Pandas,我们可以使用factorize()方法将分类数据转换成数字数据。该方法返回两个值,第一个是一个由数字组成的数组(NumPy),其代表每个分类的唯一数字,第二个是分类的标签(字符串)。

import pandas as pd

# 创建包含分类数据的数据框
df = pd.DataFrame({'A':['a', 'b', 'c', 'a'], 'B':['d', 'e', 'f', 'd']})
print(df)

# 使用factorize()方法将分类数据转换成数字数据
df['A_num'], labels = pd.factorize(df['A'])
df['B_num'], labels = pd.factorize(df['B'])
print(df)
Python

输出:

   A  B
0  a  d
1  b  e
2  c  f
3  a  d

   A  B  A_num  B_num
0  a  d      0      0
1  b  e      1      1
2  c  f      2      2
3  a  d      0      0
Python

我们可以看到,’A’和’B’列中的分类数据已经被转换成数字数据了。同时我们也得到了原始分类的标签。

使用get_dummies()方法将分类数据转换成哑变量

我们也可以使用get_dummies()方法将分类数据转换成哑变量。哑变量也是数字数据,但它们只能取0或1,用0表达不符合特征,用1表达符合特征。

import pandas as pd

# 创建包含分类数据的数据框
df = pd.DataFrame({'A':['a', 'b', 'c', 'a'], 'B':['d', 'e', 'f', 'd']})
print(df)

# 使用get_dummies()方法将分类数据转换成哑变量
df_dummies = pd.get_dummies(df)
print(df_dummies)
Python

输出:

   A  B
0  a  d
1  b  e
2  c  f
3  a  d

   A_a  A_b  A_c  B_d  B_e  B_f
0    1    0    0    1    0    0
1    0    1    0    0    1    0
2    0    0    1    0    0    1
3    1    0    0    1    0    0
Python

我们可以看到,’A’列和’B’列中的分类数据已经被转换成哑变量,各值只有0或1。

使用Categorical数据类型来优化数据处理

在转换分类数据之前,我们可以使用Categorical数据类型来优化数据处理。Pandas通过为分类数据指定Categorical数据类型来使得一些列中的值在操作时更高效。

以下是一些优化后的代码:

import pandas as pd

# 创建包含分类数据的数据框
df = pd.DataFrame({'A':['a', 'b', 'c', 'a'], 'B':['d', 'e', 'f', 'd']})
print(df)

# 将分类数据转换为Categorical数据类型df['A'] = pd.Categorical(df['A'])
df['B'] = pd.Categorical(df['B'])
print(df.dtypes)

# 得到分类的标签
labels_A = df['A'].cat.categories
labels_B = df['B'].cat.categories
print(labels_A)
print(labels_B)

# 将Categorical数据类型转换成数字数据
df['A_num'] = df['A'].cat.codes
df['B_num'] = df['B'].cat.codes
print(df)
Python

输出:

   A  B
0  a  d
1  b  e
2  c  f
3  a  d

A    category
B    category
dtype: object
Index(['a', 'b', 'c'], dtype='object')
Index(['d', 'e', 'f'], dtype='object')
   A  B  A_num  B_num
0  a  d      0      0
1  b  e      1      1
2  c  f      2      2
3  a  d      0      0
Python

我们可以看到,将分类数据转换为Categorical数据类型之后,在操作时更加高效。通过cat属性(例如,df[‘A’].cat.categories)可以得到分类的标签。

使用Categorical数据类型还有其他好处。例如,按分类排序时的操作速度更快,所消耗的内存更少等。

总结

在本文中,我们介绍了如何使用Pandas将分类数据转换成数字数据。我们讨论了两种方法:使用factorize()方法和使用get_dummies()方法。我们还介绍了如何使用Categorical数据类型在数据处理中更有效率地处理分类数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册