创建置信区间时忽略 nan 值



正如标题所暗示的那样,我正在尝试根据具有大量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

使用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

最新更新