Pandas 中的 quantile() 函数是否忽略 NaN?
Does the quantile() function in Pandas ignore NaN?
我有一个dfAB
import pandas as pd
import random
A = [ random.randint(0,100) for i in range(10) ]
B = [ random.randint(0,100) for i in range(10) ]
dfAB = pd.DataFrame({ 'A': A, 'B': B })
dfAB
我们可以采用分位数函数,因为我想知道列的第 75 个百分位数:
dfAB.quantile(0.75)
但是说现在我在 dfAB 中放入了一些 NaN 并重新执行函数,显然它是不同的:
dfAB.loc[5:8]=np.nan
dfAB.quantile(0.75)
基本上,当我计算 dfAB 的平均值时,我通过了 skipna 来忽略 Na,因为我不希望它们影响我的统计数据(我的代码中有很多,故意的,obv 使它们为零没有帮助)
dfAB.mean(skipna=True)
因此,我得到的是 whether/how 分位数函数地址为 NaN 的?
是的,这似乎是 pd.quantile
处理 NaN
值的方式。为了说明,您可以将结果与 np.nanpercentile
进行比较,后者明确 计算沿指定轴的数据的第 q 个百分位数, 同时忽略 nan 值 (引用自docs,我强调):
>>> dfAB
A B
0 5.0 10.0
1 43.0 67.0
2 86.0 2.0
3 61.0 83.0
4 2.0 27.0
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 27.0 70.0
>>> dfAB.quantile(0.75)
A 56.50
B 69.25
Name: 0.75, dtype: float64
>>> np.nanpercentile(dfAB, 75, axis=0)
array([56.5 , 69.25])
并且看到它们是等价的
是。 pd.quantile()
将在计算分位数时忽略 NaN 值。
为了证明这一点,我们可以将其与np.nanquantile
, which compute the qth quantile of the data along the specified axis, while ignoring nan values[source]进行比较。
>>> random.seed(7)
>>> A = [ random.randint(0,100) for i in range(10) ]
>>> B = [ random.randint(0,100) for i in range(10) ]
>>> dfAB = pd.DataFrame({'A': A, 'B': B})
>>> dfAB.loc[5:8]=np.nan
>>> dfAB
A B
0 41.0 7.0
1 19.0 64.0
2 50.0 27.0
3 83.0 4.0
4 6.0 11.0
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 74.0 11.0
>>> dfAB.quantile(0.75)
A 68.0
B 23.0
Name: 0.75, dtype: float64
>>> np.nanquantile(dfAB, 0.75, axis=0)
array([68. 23.])
我有一个dfAB
import pandas as pd
import random
A = [ random.randint(0,100) for i in range(10) ]
B = [ random.randint(0,100) for i in range(10) ]
dfAB = pd.DataFrame({ 'A': A, 'B': B })
dfAB
我们可以采用分位数函数,因为我想知道列的第 75 个百分位数:
dfAB.quantile(0.75)
但是说现在我在 dfAB 中放入了一些 NaN 并重新执行函数,显然它是不同的:
dfAB.loc[5:8]=np.nan
dfAB.quantile(0.75)
基本上,当我计算 dfAB 的平均值时,我通过了 skipna 来忽略 Na,因为我不希望它们影响我的统计数据(我的代码中有很多,故意的,obv 使它们为零没有帮助)
dfAB.mean(skipna=True)
因此,我得到的是 whether/how 分位数函数地址为 NaN 的?
是的,这似乎是 pd.quantile
处理 NaN
值的方式。为了说明,您可以将结果与 np.nanpercentile
进行比较,后者明确 计算沿指定轴的数据的第 q 个百分位数, 同时忽略 nan 值 (引用自docs,我强调):
>>> dfAB
A B
0 5.0 10.0
1 43.0 67.0
2 86.0 2.0
3 61.0 83.0
4 2.0 27.0
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 27.0 70.0
>>> dfAB.quantile(0.75)
A 56.50
B 69.25
Name: 0.75, dtype: float64
>>> np.nanpercentile(dfAB, 75, axis=0)
array([56.5 , 69.25])
并且看到它们是等价的
是。 pd.quantile()
将在计算分位数时忽略 NaN 值。
为了证明这一点,我们可以将其与np.nanquantile
, which compute the qth quantile of the data along the specified axis, while ignoring nan values[source]进行比较。
>>> random.seed(7)
>>> A = [ random.randint(0,100) for i in range(10) ]
>>> B = [ random.randint(0,100) for i in range(10) ]
>>> dfAB = pd.DataFrame({'A': A, 'B': B})
>>> dfAB.loc[5:8]=np.nan
>>> dfAB
A B
0 41.0 7.0
1 19.0 64.0
2 50.0 27.0
3 83.0 4.0
4 6.0 11.0
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 74.0 11.0
>>> dfAB.quantile(0.75)
A 68.0
B 23.0
Name: 0.75, dtype: float64
>>> np.nanquantile(dfAB, 0.75, axis=0)
array([68. 23.])