【问题标题】:Why is scipy.stats.ttest_ind throwing a new RuntimeWarning when comparing nans?为什么在比较 nans 时 scipy.stats.ttest_ind 会抛出新的 RuntimeWarning?
【发布时间】:2017-03-22 05:47:18
【问题描述】:

我正在使用一些非常庞大但人口稀少的 pandas 数据帧。我使用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)

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

如果我在我的 DataFrames 中删除所有 nans,那么 ttest_ind 就可以了。但我不想这样做,因为我需要维护 数据帧。

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

【问题讨论】:

  • 我注意到了同样的事情,我将其缩小到这个 numpy 示例 stackoverflow.com/q/40452765/2336654
  • 有趣。所以你现在只是压制错误吗?
  • 我通过使用 pandas 来抑制它。 pd.Series([np.nan, -1]) &lt; 1。但在我看来,这需要解决。
  • 您介意举个例子吗?如果您对此做出回答,我会立即将其标记为已回答。

标签: python-3.x pandas scipy anaconda


【解决方案1】:

我只是找到了一个选项:

nan_policy='omit'

所以试试这个:

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

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

【讨论】:

    【解决方案2】:

    当我这样做时

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

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

    pd.Series([np.nan, -1]).lt(0).values
    
    array([False,  True], dtype=bool)
    

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 2018-07-01
      • 2013-02-04
      • 2020-11-05
      • 2015-02-13
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      相关资源
      最近更新 更多