如何描述Pandas数据框中的分类列?解决默认describe仅统计数值列问题
解决Pandas DataFrame包含分类列的统计摘要问题
嗨,这个需求其实挺常见的,给你两个简单直接的方案,轻松让df.describe()涵盖分类列的统计信息:
1. 直接使用describe()的include参数
Pandas的describe()方法本身就支持指定要包含的列类型,默认只统计数值型(int/float),你只需要修改include参数就能覆盖分类列:
- 如果你想包含所有类型的列,直接传
include='all':
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'gender': ['Male', 'Female', 'Male', 'Male', 'Female'], 'age': [25, 30, 22, 35, 28], 'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou', 'Shanghai'] }) # 获取所有列的统计摘要 full_summary = df.describe(include='all') print(full_summary)
输出里,数值列(比如age)会保留原来的count、mean、std等统计项,分类列(gender、city)则会显示count、unique(唯一值数量)、top(出现最多的值)、freq(最高频次)。
- 如果你只想包含特定类型的列,比如同时包含数值型和object/categorical类型,可以传列表:
# 指定包含数值型和object类型列 target_summary = df.describe(include=['number', 'object'])
2. 将列显式转为Categorical类型
如果你的分类列目前是object类型,建议先把它转为Pandas的Categorical类型——这不仅能让统计更规范,还能节省内存、提升后续操作的效率:
# 将gender列转为Categorical类型 df['gender'] = pd.Categorical(df['gender']) # 现在可以单独查看分类列的统计 category_summary = df.describe(include='category') # 或者依然用include='all'获取全量统计 full_summary = df.describe(include='all')
转为Categorical类型后,列会被标记为专门的分类 dtype,后续做分组、筛选等操作时性能会更好,而且统计摘要的输出也会更贴合分类数据的特性。
补充说明
你提到遍历列逐个执行describe()能得到对应类型的摘要,这是因为单个Series的describe()方法会自动根据自身的dtype选择统计逻辑;而DataFrame的describe()默认只聚焦数值型数据,通过include参数就能打破这个限制,不用手动遍历每一列啦。
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

