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)
将列转换为分类类型(Categorical)是一个常见的数据操作,尤其是在数据预处理和内存优化方面非常有用。使用 astype('category')
将 DataFrame 或 Series 中的列转换为 Categorical
类型。
使用示例:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy
处理包含缺失值的 Categorical 列是一项常见的高级数据操作。Categorical
数据类型是 Pandas 用于表示分类数据的一种特殊类型。当处理这种类型的数据时,特别是当它们包含缺失值(通常表示为 NaN
)时,需要谨慎处理。
使用示例:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy
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())
当类别相对于数据量较少时,使用 Categorical
类型可以节省内存。某些操作在 Categorical
类型上执行得更快,如排序和分组(groupby)。Categorical
类型可以是有序的或无序的。有序的 Categorical
允许进行排序和比较操作。使用数值编码来表示每个类别,而不是存储重复的字符串。对大型数据集进行分组和聚合时,Categorical
类型的性能显著优于对象类型。通过定义可能的类别集合,Categorical
数据有助于保证数据完整性。使用Categorical
数据类型使得数据分析更加方便和直观,特别是在处理具有自然顺序的类别数据时。
当转换为 Categorical
类型时,所有不同的值都变成了类别。如果类别太多,可能不会节省内存。对于有序的 Categorical
,需要明确指定类别的顺序。在 Categorical
类型的列中,只能使用定义的类别值。尝试使用未定义的类别将引发错误。
参考文档:Python Pandas 高级数据操作 Categorical 数据类型的使用-CJavaPy