章节导读
分类数据(Categorical)是 pandas 中一种高效的扩展类型,专用于存储有限的、可重复的类别值(如“性别”“城市”“等级”)。它底层使用整数编码,既节省内存,又能保留类别语义与顺序。
本章包含:
- 8.1 分类数据的创建 – 多种创建方式与 CategoricalDtype 参数
- 8.2 分类数据的属性与访问 – cat 访问器、categories、ordered、codes
- 8.3 分类数据的操作 – 类别重命名、增删、排序、重编码等
- 8.4 分类数据与统计分析 – 分组、聚合、透视、哑变量等
- 8.5 分类数据的性能与最佳实践 – 内存优化、与机器学习结合、常见陷阱
为什么使用分类数据
| 特性 | 说明 |
|---|---|
| 内存高效 | 底层用整数编码,重复值多的列可节省大量内存 |
| 保留语义 | 类别值(categories)有明确的取值范围 |
| 支持顺序 | 可设置为有序类别,支持比较操作 |
| 统计友好 | 分组、聚合、透视、频次统计更自然 |
| 机器学习 | 可轻松转为哑变量或标签编码 |
与 object 类型对比
| 维度 | object | category |
|---|---|---|
| 存储 | 每个值都是 Python 对象 | 整数编码 + 类别表 |
| 内存 | 高 | 低(重复多时明显) |
| 比较 | 按字符串比较 | 可按类别顺序比较 |
| 排序 | 按字典序 | 按自定义类别顺序 |
| 统计 | 频次需 value_counts | 直接支持 category 方法 |
典型应用场景
- 有限选项的文本列:性别、国家、颜色、评级
- 数值分箱结果:
cut/qcut产生的区间- 数据仓库维度表字段
本章小结
- 分类数据是 pandas 的高效扩展类型,适合低基数重复数据
- 创建方式多样:
pd.Categorical、CategoricalDtype、astype、cut/qcut- 核心属性:
categories、ordered、codes- 操作丰富:重命名、增删、排序、重编码、缺失值处理
- 统计分析:分组、透视、交叉表、哑变量均有优势
- 最佳实践:注意合并退化、空组、填充限制,提前统一类别