我有一个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,因为我不希望它们影响我的统计信息(我的代码中有很多目的是故意的,并且使它们变为零并不意味着这样做)。 t帮忙)
dfAB.mean(skipna=True)
因此,我要问的是分位数功能是否/如何解决NaN?
答案 0 :(得分:1)
是的,这似乎是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])
看到它们是等效的