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

SciPy 1.9+中stats.percentileofscore返回数组而非标量的问题

解决SciPy 1.9+中stats.percentileofscore返回数组而非标量的兼容方案

问题根源

SciPy 1.9及以上版本对输入为二维结构(比如pandas DataFrame)的percentileofscore函数处理逻辑做了调整:函数会遍历DataFrame的每一列独立计算百分位数,因此返回结果为数组而非旧版本的标量。这和查询值的类型(标量/数组)无关,核心是输入数据集的维度问题。

具体兼容方案

方案1:将DataFrame转为一维数组计算

把二维的DataFlatten转为一维结构,让函数按整体数据集计算,返回标量结果:

from scipy import stats
import pandas as pd

# 示例数据
df = pd.DataFrame({'data': [1, 3, 5, 7, 9]})
score = 5.0  # 从文本读取的float标量

# 转为一维数组后计算
percentile = stats.percentileofscore(df.to_numpy().ravel(), score)

ravel()或flatten()都可以实现二维转一维,两者差异是前者返回视图(内存复用)、后者返回拷贝,按需选择即可。

方案2:针对单列数据计算

如果原本就只需要针对DataFrame中某一列计算,直接指定列名传入,函数会返回标量:

# 仅针对目标列计算
percentile = stats.percentileofscore(df['target_column'], score)

方案3:兼容新旧版本的通用处理

如果代码需要同时适配SciPy 1.9前后版本,可以对返回结果做统一处理:

result = stats.percentileofscore(df, score)
# 若返回数组则提取标量,否则直接使用
percentile = result.item() if isinstance(result, (pd.Series, np.ndarray)) else result

内容的提问来源于stack exchange,提问作者Jon Bonk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:03