我无法理解pandas和/或numpy如何处理NaN值.我正在提取大熊猫数据帧的子集以计算t-stats,例如我想知道x1值为A的组的x2平均值与x1值为B的组的平均值是否存在显着差异(抱歉没有让这个成为一个有效的例子,但我不知道如何重新创建在我的数据框中弹出的NaN值,使用read_csv读取原始数据,其中csv表示缺少的值NA):
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
Run Code Online (Sandbox Code Playgroud)
也就是说,我有两个pandas.core.series.Series对象,然后我想对它进行t检验.但是,使用
st.ttest_ind(A, B)
Run Code Online (Sandbox Code Playgroud)
收益:
(array(nan), nan)
Run Code Online (Sandbox Code Playgroud)
我认为这与ttest_ind接受数组作为输入的事实有关,当将系列转换为数组时,我的NaN值似乎存在问题.如果我尝试计算原始系列的方法,我得到:
A.mean(), B.mean()
1.5802, 1.2
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将系列变成数组时,我得到:
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. ])
Run Code Online (Sandbox Code Playgroud)
也就是说,NaN转入nan并采取手段不再有效:
A.mean()
nan
Run Code Online (Sandbox Code Playgroud)
如何处理缺失值以确保我仍然可以使用系列/数组进行计算?
pandasbottleneck nanmean我相信使用与函数相同的代码,因此自动忽略nans.numpy不会为你这样做.但是,你真正想做的是掩盖nan两个系列中的值并将其传递给t-test:
mask = numpy.logical_and(numpy.isfinite(A), numpy.isfinite(B))
st.ttest_ind(A[mask], B[mask])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |