创建置信区间时忽略nan值

时间:2018-10-05 18:35:49

标签: python pandas scipy

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

1 个答案:

答案 0 :(得分:3)

使用np.nanmean代替np.meanhttps://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