百分位数必须在[0,100]范围内

时间:2020-03-12 09:08:23

标签: python pandas numpy csv scipy

下面显示的代码只是我正在处理的一个大项目的一部分。

O = stats.scoreatpercentile(dfx[dfx['outlier'] == 1]['column_name'], np.abs(threshold))
l = stats.scoreatpercentile(dfx[dfx['outlier'] == 0]['column_name'], np.abs(threshold))
Data = stats.scoreatpercentile(dfx['column_name'], np.abs(threshold))
O, l, Data

不幸的是,我收到以下错误消息

ValueError: percentile must be in the range [0, 100]

我已经进行了一些研究,但是对于此错误并没有太多帮助

2 个答案:

答案 0 :(得分:2)

scoreatpercentile的第二个参数应该在0到100之间,因此我猜测对于某些值,threshold小于-100或大于100。

这是因为百分位数的数学含义,什么是200百分位数?在这种情况下,一种可能的“解决方案”是将其上的所有值都映射到100,您可以这样做:

def get_perc(threshold):
    perc = np.abs(threshold)
    return 100 if perc>100 else perc

O = stats.scoreatpercentile(dfx[dfx['outlier'] == 1]['column_name'], get_perc(threshold))
l = stats.scoreatpercentile(dfx[dfx['outlier'] == 0]['column_name'], get_perc(threshold))
Data = stats.scoreatpercentile(dfx['column_name'], get_perc(threshold))
O, l, Data

在执行此操作之前,建议您清除百分位数的概念,然后您将能够确定这是否对您来说是一个好的解决方案。我发现this article解释得很简单,或者您可以查看Wikipedia

答案 1 :(得分:0)

第二个参数:np.abs(threshold)必须介于0到100之间。有关更多参考,[this]:https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.percentile.html可以帮助