describe() 默认返回 count、mean、std、min、25%、50%、75%、max 八个数值统计量,仅作用于数值列;非数值列需指定 include 参数,特定分位数需用 percentiles 参数,长尾数据下中位数比均值更稳健。

describe() 返回的统计量到底包含哪些?
describe() 默认只对数值列生效,返回 count、mean、std、min、25%、50%(中位数)、75%、max 八个统计量。它不计算偏度、峰度或分布形状指标,也不是直方图替代品。
常见错误是以为 describe() 能直接判断“是否正态”——它不能。它只给出位置和离散程度的粗略快照。
- 想看非数值列(如字符串)的频次统计?得加参数
include=['object']或include='all' - 想看特定分位数(比如 1%、99%)?用
percentiles=[0.01, 0.99],别硬凑默认的四分位 - 空值太多时
count明显小于行数,但describe()不提示缺失模式——得配合isna().sum()看具体哪几列烂得最厉害
为什么 describe() 对长尾数据容易“失真”?
当数据存在极端异常值(比如用户支付金额里混入一个 1 亿元订单),mean 和 std 会被严重拉偏,而 50%(中位数)反而更稳。这时 describe() 输出的均值看起来像“平均每人花了 50 万”,实际 99% 用户只花了不到 500 块。
- 遇到收入、点击量、响应时间这类天然右偏数据,优先盯
50%和75%,而不是mean -
std在长尾下意义弱——改用mad(绝对中位差)更鲁棒,但describe()不提供,得手动算:df[col].sub(df[col].median()).abs().median() - 如果
min和25%相等,大概率说明大量数据堆在下界(比如大量 0 值),这不是统计量错了,是数据本身有业务含义的截断
describe() 和 hist()/boxplot() 配合使用的实际节奏
单看 describe() 就下分布结论,等于只看体检报告里的血压数字就诊断高血压。它该是第一步筛查,不是终审。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- 先跑
df.describe(),快速扫出std异常高、min==max、count明显少的列 - 对可疑列立刻跟一句
df[col].hist(bins=50)或df.boxplot(column=col),看是双峰、截断还是真异常值 - 特别注意
50%和mean差距大的列——差一倍以上基本可以断定有偏态,这时候再查skew()或画 KDE 图才有的放矢
describe() 在不同 dtype 下的行为差异
同一份数据,列类型不同,describe() 返回内容天差地别。比如把日期列误存为 object,它会当成分类变量统计频次;存成 datetime64,则直接跳过不统计(除非显式 include='all')。
-
int64和float64:返回完整八项统计 -
object(字符串/混合):返回count、unique、top(最高频值)、freq(频次),不计算均值方差 -
bool:按数值处理(True=1, False=0),所以会出mean(即 True 占比) - 没设
include时,category列默认被忽略——得加include='all'才露面
最容易被忽略的是:当你用 read_csv() 读数据却没指定 dtype,Pandas 可能把本该是数值的 ID 列推断成 object,导致 describe() 完全不显示它的统计量。这事不报错,只静默跳过。

















