numpy.percentile用于计算数组指定百分位数,关键参数包括a(输入数组)、q(0–100间百分位数)、axis(计算轴,默认None展平);含NaN需设nan_policy='omit';method控制插值方式;keepdims配合axis保留维度。
percentile函数的基本用法和参数含义
numpy.percentile 是计算数组中指定百分位数的主力函数,它不修改原数组,返回标量或新数组。关键参数有三个:a(输入数组)、q(要计算的百分位数,0–100之间)、axis(沿哪个轴计算)。默认 axis=None,即把整个数组展平后算;设为 axis=0 表示按列算,axis=1 表示按行算。
注意 q 必须是数字或数字序列,不能是浮点数组以外的类型;传入 [25, 50, 75] 会一次性返回三个值,比循环调用三次更高效。
处理含 NaN 的数组时必须加 nan_policy='omit'
如果数组里有 np.nan,直接调用 np.percentile 会返回 nan——这不是 bug,而是默认行为。你得显式告诉它怎么处理缺失值:
- 不加参数:结果全为
nan(哪怕只有一个nan) - 加
nan_policy='omit':跳过nan计算(最常用) -
nan_policy='propagate':保持默认,遇到nan就返回nan -
nan_policy='raise':直接抛ValueError
例如:np.percentile(arr, 90, nan_policy='omit') 才能对含缺失值的传感器数据做有效统计。
插值方式影响结果,method 参数不能忽略
当目标百分位落在两个实际数据点之间时,percentile 需要插值。不同 method 值结果可能差不少,尤其在小样本或边界值(如第1百分位)时:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
-
method='linear'(默认):线性插值,最常见 -
method='lower':取下界值,保守估计 -
method='higher':取上界值,偏高估计 -
method='midpoint':取上下界中点 -
method='nearest':取最近的实际值(四舍五入式)
金融风控中常选 'lower' 避免低估风险阈值;A/B测试分析则多用默认 'linear' 保证平滑性。
axis 和 keepdims 配合使用才能保留原始维度结构
想对二维数组每列求第95百分位,但又希望结果形状是 (1, n) 而不是一维 (n,),就得用 keepdims=True:
np.percentile(data, 95, axis=0, keepdims=True)
否则即使指定了 axis=0,返回的也是压缩掉该轴的一维数组,后续做广播运算(比如减去每列的95%分位数做归一化)会报错。这个细节在写批量预处理脚本时特别容易漏。
真正难的不是调用函数,而是想清楚你要的是「全局阈值」「逐列阈值」还是「逐行阈值」,以及是否允许 NaN 干扰、要不要控制插值倾向——这些决定比敲代码花的时间多得多。