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

时间:2016-11-08 14:38:12

标签: python-3.x pandas scipy anaconda

我正在使用一些非常庞大但人烟稀少的pandas DataFrames。我使用scipy.stats.ttest_ind来比较包含许多nans的一些列。我最近更新到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)

因此该函数运行,我可以使用输出,就像我更新之前唯一的区别是现在我得到这个运行时警告。

如果我删除了我的DataFrame中的所有nans,那么ttest_ind就可以了。但我不想这样做,因为我需要保持结构 DataFrames。

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

2 个答案:

答案 0 :(得分:2)

当我这样做时

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

enter image description here

但是,我可以把它包装在一个熊猫系列中,让大熊猫压制警告

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

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

答案 1 :(得分:0)

我只是找到一个选项:

nan_policy='omit'

所以尝试一下:

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

希望它对您的情况也有帮助!