正如标题所示,我正在尝试根据具有大量nan值的表创建置信区间。这是我正在使用的示例。
Attendence% 2016-10 2016-11 2017-01 2017-02 2017-03 2017-04 ...
Name
Karl nan 0.2 0.4 0.5 0.2 1.0
Alice 1.0 0.7 0.6 nan nan nan
Ryan nan nan 1.0 0.1 0.9 0.2
Don nan 0.5 nan 0.2 nan nan
Becca nan 0.2 0.6 0 nan nan
作为参考,在我的实际数据框中,NaN比没有的多,并且它们表示不需要显示的月份,因此将值替换为0会影响结果。
现在,每次我尝试对每个名称应用一个置信区间时,它都会返回均值为NaN以及两个区间。
Karl (nan, nan, nan)
Alice (nan, nan, nan)
Ryan (nan, nan, nan)
Don (nan, nan, nan)
Becca (nan, nan, nan)
是否有一种方法可以过滤掉NaN,因此它仅应用公式,而没有考虑NaN值。到目前为止,我一直在做以下事情:
未堆叠的是我直观表示的表格。
def mean_confidence_interval(unstacked, confidence=0.9):
a = 1.0 * np.array(unstacked)
n = len(a)
m, se = np.mean(a), scipy.stats.sem(a)
h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
return m, m-h, m+h
answer = unstacked.apply(mean_confidence_interval)
answer
答案 0 :(得分:3)
使用np.nanmean
代替np.mean
:https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanmean.html
对于scipy.stats.sem(a)
,将其替换为通行证scipy.stats.sem(a, nan_policy='omit')
。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.sem.html