gpt4 book ai didi

python-2.7 - Pandas 分位数因 NaN 的存在而失败

转载 作者:行者123 更新时间:2023-12-04 12:41:07 32 4
gpt4 key购买 nike

我在计算四分位距时遇到了一个有趣的情况。假设我们有一个数据框,例如:

import pandas as pd
index=pd.date_range('2014 01 01',periods=10,freq='D')
data=pd.np.random.randint(0,100,(10,5))
data = pd.DataFrame(index=index,data=data)

data
Out[90]:
0 1 2 3 4
2014-01-01 33 31 82 3 26
2014-01-02 46 59 0 34 48
2014-01-03 71 2 56 67 54
2014-01-04 90 18 71 12 2
2014-01-05 71 53 5 56 65
2014-01-06 42 78 34 54 40
2014-01-07 80 5 76 12 90
2014-01-08 60 90 84 55 78
2014-01-09 33 11 66 90 8
2014-01-10 40 8 35 36 98

# test for q1 values (this works)
data.quantile(0.25)
Out[111]:
0 40.50
1 8.75
2 34.25
3 17.50
4 29.50

# break it by inserting row of nans
data.iloc[-1] = pd.np.NaN

data.quantile(0.25)
Out[115]:
0 42
1 11
2 34
3 12
4 26

第一个四分位数可以通过取数据框中低于整体中位数的值的中位数来计算,因此我们可以看到 data.quantile(0.25) 应该产生什么。例如
med = data.median()
q1 = data[data<med].median()
q1
Out[119]:
0 37.5
1 8.0
2 19.5
3 12.0
4 17.0

似乎分位数未能提供 q1 等的适当表示,因为它在处理 NaN 值方面做得不好(即它在没有 NaN 的情况下工作,但不适用于 NaN)。

我认为这可能不是“NaN”问题,而是分位数无法处理偶数数据集(即中位数必须计算为两个中心数的平均值)。但是,在使用偶数行和奇数行的数据帧进行测试后,我发现分位数正确处理了这些情况。只有当数据帧中存在 NaN 值时,问题才会出现。

我想使用 quntile 来计算我的数据框中的滚动 q1/q3 值,但是,这不适用于 NaN 的存在。任何人都可以提供解决此问题的方法吗?

最佳答案

内部,quantile用途 numpy.percentile在非空值上。当您更改 data 的最后一行时至 NaNs你基本上只剩下一个数组 array([ 33., 46., 71., 90., 71., 42., 80., 60., 33.])在第一列

计算中 np.percentile(array([ 33., 46., 71., 90., 71., 42., 80., 60., 33.])给出 42。

从文档字符串:

Given a vector V of length N, the qth percentile of V is the qth ranked value in a sorted copy of V. A weighted average of the two nearest neighbors is used if the normalized ranking does not match q exactly. The same as the median if q=50, the same as the minimum if q=0 and the same as the maximum if q=100.

关于python-2.7 - Pandas 分位数因 NaN 的存在而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24046279/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com