pandas.Series.quantile()求分位数需传入小数如0.25、0.5、0.75,默认linear插值;禁传字符串或整数,否则报错;支持列表批量计算;interpolation参数控制插值方式;注意NaN和空Series返回nan,需提前校验。

用 pandas.Series.quantile() 求 25%、50%(中位数)、75% 分位数
直接调 quantile() 就行,传入小数表示分位点:0.25、0.5、0.75。它默认插值(interpolation='linear'),对大多数场景够用。
常见错误是传字符串比如 '25%' 或整数 25,会报 TypeError: quantile() takes 1 positional argument but 2 were given 或 ValueError: quantiles must be numeric。
-
quantile(0.25)→ 第一四分位数(Q1) -
quantile(0.5)→ 中位数,等价于median() -
quantile(0.75)→ 第三四分位数(Q3) - 一次求多个:用列表
quantile([0.25, 0.5, 0.75]),返回Series
interpolation 参数决定怎么算“中间位置”,不设就容易误解结果
当数据个数为偶数或分位点落在两个值之间时,quantile() 必须插值。默认 'linear' 是线性插值,但还有几个关键选项:
-
interpolation='lower'→ 取左边值(向下取) -
interpolation='higher'→ 取右边值(向上取) -
interpolation='midpoint'→ 取左右平均值(和'linear'在等距时一致) -
interpolation='nearest'→ 取最接近的原始观测值
例如序列 [1, 2, 3, 4],quantile(0.75) 默认返回 3.25(线性插值),但设 interpolation='higher' 就得 4.0。统计报告里若要求“保守估计 Q3”,就得明确选 'higher'。
立即学习“Python免费学习笔记(深入)”;
NumPy 的 np.quantile() 和 pandas 行为不完全一致
两者默认插值方式不同:np.quantile() 默认也是 'linear',但 pandas 对 NaN 更敏感,且自动跳过缺失值(除非显式设 skipna=False);而 NumPy 遇到 NaN 直接返回 nan,除非加 nan_policy='omit'。
- 想跨库结果一致?统一用
interpolation='linear'+ 显式处理NaN - 用
np.quantile(arr, 0.75, method='linear')(注意 NumPy 1.22+ 把interpolation改成method) - pandas 里
Series.quantile(q, interpolation=...)仍用旧参数名
别在空 Series 或全 NaN 上调 quantile()
空 Series(len()==0)或全 NaN 时,quantile() 默认返回 nan,不报错,但容易被忽略——下游计算可能因此崩掉或静默出错。
- 检查前加
if s.dropna().empty: - 或用
s.quantile(q, skipna=True)(默认就是True,但明确写出来更安心) - 如果业务上不允许空输入,建议提前 raise
ValueError("Empty data")
分位数不是黑箱,插值逻辑、缺失值策略、空数据响应,每个点都可能让结果偏移 10% 以上——尤其在小样本或边界值附近。










