首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NaN的治疗

NaN的治疗
EN

Stack Overflow用户
提问于 2014-05-08 13:38:53
回答 2查看 1.9K关注 0票数 4

我很难理解熊猫和/或numpy是如何处理NaN值的。为了计算t-stats,我正在提取熊猫数据的子集,例如,我想知道,与x2值为B的组相比,x1值为A的组的x1平均值是否有显著差异(很抱歉没有将其作为工作示例,但我不知道如何重新创建数据中弹出的NaN值,使用read_csv读取原始数据,csv用NA表示缺少值):

代码语言:javascript
复制
import numpy as np
import pandas as pd
import scipy.stats as st
A = data[data['x1']=='A']['x2']
B = data[data['x1']=='B'].x2
A

2      3
3      1
5      2
6      3
10     3
12     2
15     2
16     0
21     0
24     1
25     1
28   NaN
31     0
32     3
...
677     0
681   NaN
682     3
683     1
686     2
Name: praxiserf, Length: 335, dtype: float64

也就是说,我有两个pandas.core.series.Series对象,然后要对其执行t测试。然而,使用

代码语言:javascript
复制
st.ttest_ind(A, B)

返回:

代码语言:javascript
复制
(array(nan), nan)

我认为这与ttest_ind接受数组作为输入这一事实有关,并且在将系列转换为数组时,我的NaN值似乎有问题。如果我试图计算原始级数的平均值,我会得到:

代码语言:javascript
复制
A.mean(), B.mean()

1.5802, 1.2

但是,当我试图将该系列转换为数组时,我得到:

代码语言:javascript
复制
A_array = np.asarray(A)
A_array

array([ 3., 1., 2., 3., 3., 2., 2., 0., 0., 1., 1.,
        nan, 0., 3., ..., 1., nan, 0., 3. ])

也就是说,NaN变成了nan,而采取手段已经行不通了:

代码语言:javascript
复制
A.mean()

nan

应该如何处理缺失的值,以确保我仍然可以使用序列/数组进行计算?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-08 13:52:07

我相信,pandas使用与bottleneck nanmean函数相同的代码,因此自动忽略nannumpy不会为您这样做。然而,您真正想做的是在这两个系列中屏蔽nan-values,并将其传递给t测试:

代码语言:javascript
复制
mask = numpy.logical_and(numpy.isfinite(A), numpy.isfinite(B))
st.ttest_ind(A[mask], B[mask])
票数 5
EN

Stack Overflow用户

发布于 2016-12-18 20:03:40

ttest_ind接受一个名为"nan_policy“的参数,该参数指示如何对待nans。默认情况下,nan_policy是“传播”,如果输入中的任何值都是nan,就会导致nan。如果有任何输入是nan,则“nan”将引发错误。“省略”忽略了南。

代码语言:javascript
复制
st.ttest_ind(A, B, nan_policy="omit")

会给你一个非南的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23543431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档