Python Pandas 高级数据操作 Categorical 数据类型的使用

1、创建 Categorical 数据

pd.Categorical()函数用于将一个列表、数组或类似的序列转换为分类数据(categorical data)。分类数据是一种特殊的数据类型,用于表示具有固定数量可能值的变量,类似于枚举类型。通过将数据转换为 Categorical 类型,可以提高数据处理的效率,尤其是在进行分类分析或处理具有明确类别的数据时。

参数

描述

values

类似列表:分类的值。如果给定了类别,不在类别中的值将被替换为 NaN。

categories

类似索引(唯一),可选:这个分类的唯一类别。如果未给出,类别假定为

values

的唯一值(如果可能的话按排序,否则按照它们出现的顺序)。

ordered

布尔值,默认为 False:这个分类是否被视为有序分类。如果为 True,则结果分类将是有序的。一个有序的分类在排序时,会尊重其类别属性的顺序(反过来这个类别属性就是提供的类别参数)。

dtype

CategoricalDtype:用于这个分类的 CategoricalDtype 实例。从版本 0.21.0 开始新增。

使用示例:

import pandas as pd

# 创建一个简单的列表
data = ['low', 'medium', 'high', 'medium', 'low']

# 使用pd.Categorical()创建分类数据
# 指定类别,并设置有序
cat_data = pd.Categorical(data, categories=['low', 'medium', 'high'], ordered=True)

print("有序分类数据:\n", cat_data)

# 创建一个DataFrame,使用指定的CategoricalDtype
df = pd.DataFrame({
    'Quality': pd.Categorical(data, categories=['low', 'medium', 'high'], ordered=True, dtype="category")
})

print("\nDataFrame:\n", df)

# 原始数据
data = ['cold', 'warm', 'hot', 'warm', 'cold', 'hot']

# 将数据转换为分类类型
# 指定类别,并设置为有序分类
temperature_category = pd.Categorical(data, categories=['cold', 'warm', 'hot'], ordered=True)

# 创建一个Categorical Series
temperature_series = pd.Series(temperature_category)

print("Categorical Series:\n", temperature_series)

# 检查Series的dtype
print("\nSeries dtype:", temperature_series.dtype)

# 示例:使用Categorical Series进行条件过滤
filtered_series = temperature_series[temperature_series > 'cold']
print("\nFiltered Series (items greater than 'cold'):\n", filtered_series)

2、将列转换为 Categorical

将列转换为分类类型(Categorical)是一个常见的数据操作,尤其是在数据预处理和内存优化方面非常有用。使用 astype('category') 将 DataFrame 或 Series 中的列转换为 Categorical 类型。

  使用示例:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy

3、处理Categorical列中的缺失值

处理包含缺失值的 Categorical 列是一项常见的高级数据操作。Categorical 数据类型是 Pandas 用于表示分类数据的一种特殊类型。当处理这种类型的数据时,特别是当它们包含缺失值(通常表示为 NaN)时,需要谨慎处理。

 使用示例:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy

4、使用Categorical列进行操作

Categorical 列支持大多数标准的 DataFrame 操作,包括分组、排序和汇总。使用 Categorical 类型可以进行更有效的内存使用和更快的计算,尤其是在数据集包含重复类别时。

import pandas as pd

# 创建分类
categories = ["A", "B", "C"]

# 创建 Categorical 列
data = pd.Categorical(["A", "B", "C", "A", "B"], categories=categories)

# 比较数据
print(data == "A")


# 索引数据
print(data[1])


# 统计数据
print(data.describe())


# 排序数据
print(data.sort_values())

# 对每个分类的计数
print(data.value_counts())

5、Categorical 数据的优势

当类别相对于数据量较少时,使用 Categorical 类型可以节省内存。某些操作在 Categorical 类型上执行得更快,如排序和分组(groupby)。Categorical 类型可以是有序的或无序的。有序的 Categorical 允许进行排序和比较操作。使用数值编码来表示每个类别,而不是存储重复的字符串。对大型数据集进行分组和聚合时,Categorical类型的性能显著优于对象类型。通过定义可能的类别集合,Categorical数据有助于保证数据完整性。使用Categorical数据类型使得数据分析更加方便和直观,特别是在处理具有自然顺序的类别数据时。

6、使用总结

当转换为 Categorical 类型时,所有不同的值都变成了类别。如果类别太多,可能不会节省内存。对于有序的 Categorical,需要明确指定类别的顺序。在 Categorical 类型的列中,只能使用定义的类别值。尝试使用未定义的类别将引发错误。

参考文档:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy

你可能感兴趣的:(python,大数据,开发语言)