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