为什么 scipy.stats.ttest_ind 在比较 nans 时抛出一个新的 RuntimeWarning?

Why is scipy.stats.ttest_ind throwing a new RuntimeWarning when comparing nans?

我正在处理一些非常庞大但人口稀少的 pandas DataFrame。我使用 scipy.stats.ttest_ind 来比较其中一些包含许多 nan 的列。我最近更新到 Anaconda 4.2.12,现在在使用 scipy.stats.ttest_ind 时出现 运行 时间错误,如下例所示。

import numpy as np
import scipy
case1 = case2 = np.linspace(np.nan,np.nan,5)
scipy.stats.ttest_ind(case1,case2)

>>>output: 
C:\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1748: RuntimeWarning: invalid value encountered in greater
    cond1 = (scale > 0) & (x > self.a) & (x < self.b)
C:\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1748: RuntimeWarning: invalid value encountered in less
    cond1 = (scale > 0) & (x > self.a) & (x < self.b)
C:\Anaconda3\lib\site-packages\scipy\stats\_distn_infrastructure.py:1749: RuntimeWarning: invalid value encountered in less_equal
  cond2 = cond0 & (x <= self.a)

所以函数 运行s 和我可以像更新之前一样使用输出,唯一的区别是现在我得到这个 运行 时间警告。

如果我将所有 nan 都放入我的数据帧中,那么 ttest_ind 就可以正常工作。但我不想这样做,因为我需要维护 数据框。

有人知道为什么会这样吗?除了继续使用该函数而忽略警告或编写某种绕过函数的破解工作之外,还有什么我可以做的吗?

当我做的时候

np.array([np.nan, -1]) < 0

但是,我可以将它包装在 pandas 系列中,让 pandas 抑制警告

pd.Series([np.nan, -1]).lt(0).values

array([False,  True], dtype=bool)

我刚刚找到一个选项:

nan_policy='omit'

所以试试这个:

t,p = ttest_ind(cls_up['cause_pct'],cls_down['cause_pct'],nan_policy='omit')

希望对你的情况也有帮助!