You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何描述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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:14:36