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)
输出:
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
我们可以看到,’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)
输出:
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
我们可以看到,’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)
输出:
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
我们可以看到,将分类数据转换为Categorical数据类型之后,在操作时更加高效。通过cat属性(例如,df[‘A’].cat.categories)可以得到分类的标签。
使用Categorical数据类型还有其他好处。例如,按分类排序时的操作速度更快,所消耗的内存更少等。
总结
在本文中,我们介绍了如何使用Pandas将分类数据转换成数字数据。我们讨论了两种方法:使用factorize()方法和使用get_dummies()方法。我们还介绍了如何使用Categorical数据类型在数据处理中更有效率地处理分类数据。