📅  最后修改于: 2023-12-03 14:45:04.675000             🧑  作者: Mango
Pandas 是一个用于数据处理和数据分析的 Python 库。其中分类数据(categorical data)也是其支持的一种数据类型。分类数据通常是由一组固定的值组成,例如性别(Female/Male)、评级(A/B/C/D)等。Pandas 中的分类数据类型可以显著提高计算性能和内存效率。
除了实际数据,Pandas 还提供了一类虚拟数据类型,称为 “虚拟分类数据”(CategoricalDtype)。它在大多数情况下与实际的分类数据类型类似,但它没有对应的实际数据。这种数据类型通常用于在处理大量实际数据时,构建分类数据类型的元信息。
Pandas 中的虚拟分类数据类型是通过两个类实现的:
在从头开始构建一组分类数据之前,可以使用 CategoricalDtype 类构建一个采用 Python 列表、元组或集合的类别(categories)列表。例如:
import pandas as pd
from pandas.api.types import CategoricalDtype
category = CategoricalDtype(['up', 'down', 'left', 'right'])
上面的代码定义了一个名为 category 的虚拟分类数据类型,其类别包括 'up', 'down', 'left' 和 'right'。
在构建虚拟分类数据后,可以使用 Categorical 构建虚拟分类数据。Categorical 构造函数可以采用以下参数(参数都是可选的):
当指定 values 参数时,Categorical 会构建一个实际的分类 Series。例如:
data = pd.Series(['up', 'down', 'left', 'up'], dtype=category)
上面的代码创建了一个名为 data 的 Series,其实际数据为 ['up', 'down', 'left', 'up'],而其含义是一个名为 category 的虚拟分类数据类型。
可以使用 Categorical 的属性访问类别信息:
print(data.cat.categories)
输出结果为:
Index(['up', 'down', 'left', 'right'], dtype='object')
除了这些,Categorical 还支持许多其他的方法和属性,例如 Categorical.codes、Categorical.rename_categories()、Categorical.set_categories() 等。这些方法和属性都已经相当成熟且易于使用,具体实现细节可以参考官方文档。
在 Pandas 中,通常使用 astype() 方法将一般数据类型转换为分类数据类型。例如:
data = pd.Series(['up', 'down', 'left', 'up', 'right', 'up'])
data.astype('category', categories=['up', 'down', 'left', 'right'])
上面的代码将 data 的数据类型转换为分类数据类型,并指定了四个类别。Categorical 的类别存储在对象内,以便在进行其他操作时进行使用。如果不指定 categories 参数,则会自动将类别设置为数据本身中出现的所有值。
通过使用虚拟分类数据,Pandas 可以提供对分类数据的支持,并且可以显著提高计算性能和内存效率。Pandas 非常方便,支持从头开始构建分类数据或从普通数据类型转换为分类数据类型。如果您想使用 Pandas 对分类数据进行操作,那么虚拟分类数据就是一个强大而灵活的工具。