📜  pandas 虚拟分类数据 (1)

📅  最后修改于: 2023-12-03 14:45:04.675000             🧑  作者: Mango

Pandas 虚拟分类数据

Pandas 是一个用于数据处理和数据分析的 Python 库。其中分类数据(categorical data)也是其支持的一种数据类型。分类数据通常是由一组固定的值组成,例如性别(Female/Male)、评级(A/B/C/D)等。Pandas 中的分类数据类型可以显著提高计算性能和内存效率。

除了实际数据,Pandas 还提供了一类虚拟数据类型,称为 “虚拟分类数据”(CategoricalDtype)。它在大多数情况下与实际的分类数据类型类似,但它没有对应的实际数据。这种数据类型通常用于在处理大量实际数据时,构建分类数据类型的元信息。

Pandas 中的虚拟分类数据类型

Pandas 中的虚拟分类数据类型是通过两个类实现的:

  • CategoricalDtype:代表具有给定文本值的分类数据类型。
  • Categorical:代表一个实际的具有给定类别的分类数据,或者一个包含分类数据的 Series/DataFrame 的类别。

在从头开始构建一组分类数据之前,可以使用 CategoricalDtype 类构建一个采用 Python 列表、元组或集合的类别(categories)列表。例如:

import pandas as pd
from pandas.api.types import CategoricalDtype

category = CategoricalDtype(['up', 'down', 'left', 'right'])

上面的代码定义了一个名为 category 的虚拟分类数据类型,其类别包括 'up', 'down', 'left' 和 'right'。

Pandas 中的虚拟分类数据

在构建虚拟分类数据后,可以使用 Categorical 构建虚拟分类数据。Categorical 构造函数可以采用以下参数(参数都是可选的):

  • values:表示实际分类数据,可以是一个列表、NumPy 数组、Series 或 Index 对象。
  • categories:表示类别(也可以通过 CategoricalDtype 类指定)。
  • ordered:表示分类数据是否有序。
  • dtype:如果没有通过类别指定,可以使用这个参数来指定数据类型。

当指定 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 对分类数据进行操作,那么虚拟分类数据就是一个强大而灵活的工具。