Python 3.x scipy t测试中的值错误\u ind

Python 3.x scipy t测试中的值错误\u ind,python-3.x,numpy,scipy,array-broadcasting,Python 3.x,Numpy,Scipy,Array Broadcasting,我有以下csv文件: SRA ID ERR169499 ERR169498 ERR169497 Label 1 0 1 TaxID PRJEB3251_ERR169499 PRJEB3251_ERR169499 PRJEB3251_ERR169499 333046 0.05 0.99 99.61 1049

我有以下csv文件:

SRA ID  ERR169499            ERR169498           ERR169497
Label   1                    0                   1
TaxID   PRJEB3251_ERR169499  PRJEB3251_ERR169499 PRJEB3251_ERR169499
333046  0.05                 0.99                99.61
1049    0.03                 2.34                34.33
337090  0.01                 9.78                23.22
99007   22.33                2.90                0.00
对于标签为
0
的案例,我有92列;对于标签为
1
的控件,我有95列。到目前为止,我必须进行两次样本独立T检验和ranksum检验:

df  = pd.read_csv('final_out_transposed.csv', header=[1,2], index_col=[0])
case = df.xs('0', axis=1, level=0).dropna()
ctrl = df.xs('1', axis=1, level=0).dropna()
(tt_val, p_ttest) = ttest_ind(case, ctrl, equal_var=False)
我得到的错误是:
ValueError:操作数无法与形状(92、)(95、)
一起广播

回溯是:

File "<ipython-input-152-d58634e75106>", line 1, in <module>
runfile('C:/IBD Bioproject/New folder/temp_3251.py', wdir='C:/IBD 
Bioproject/New folder')

File "C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
execfile(filename, namespace)

File "C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/IBD Bioproject/New folder/temp_3251.py", line 106, in <module>
tt_val, p_ttest = ttest_ind(case, ctrl, equal_var=False)

File "C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\scipy\stats\stats.py", line 4068, in ttest_ind
df, denom = _unequal_var_ttest_denom(v1, n1, v2, n2)


File "C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\scipy\stats\stats.py", line 3872, in _unequal_var_ttest_denom
df = (vn1 + vn2)**2 / (vn1**2 / (n1 - 1) + vn2**2 / (n2 - 1))

ValueError: operands could not be broadcast together with shapes (92,) (95,)
文件“”,第1行,在
运行文件('C:/IBD Bioproject/New folder/temp_3251.py',wdir='C:/IBD
生物项目/新文件夹“)
文件“C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
运行文件中的packages\spyder\utils\site\sitecustomize.py”,第880行
execfile(文件名、命名空间)
文件“C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\spyder\utils\site\sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/IBD Bioproject/New folder/temp_3251.py”,第106行,在
tt_val,p_ttest=ttest_ind(大小写,ctrl,相等值=False)
文件“C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\scipy\stats\stats.py”,第4068行,在ttest\u ind中
df,denom=\u不相等\u变量\u t测试denom(v1,n1,v2,n2)
文件“C:\Users\ksingh1\AppData\Local\Continuum\Anaconda3\lib\site-
packages\scipy\stats\stats.py”,第3872行,在
df=(vn1+vn2)**2/(vn1**2/(n1-1)+vn2**2/(n2-1))
ValueError:操作数无法与形状(92,)(95,)一起广播
我读的很少,但仍然不清楚,我也读了


提前感谢

显然,熊猫数据帧的
xs
方法创建的对象看起来像二维数组。当传递到
ttest\u ind
时,必须将其展平,使其看起来像一维数组

试试这个:

ttest_ind(case.values.ravel(), ctrl.values.ravel(), equal_var=False)

熊猫对象的
values
属性给出了一个numpy数组,而
ravel()
方法将数组展平为一维。

它的效果非常好。非常感谢,很久以来我一直在做这件事。嗨,代码工作得很好,但是我无法得到每一行的结果。我尝试了
df.iterrows
,但没有成功。如何获得每行病例和对照的ttest结果?我一直在努力,但似乎没有得到正确的答案。感谢您将您的
大小写
ctrl
对象转换为普通的二维numpy数组(分别具有形状
(n,92)
(n,95)
)?然后你可以使用
ttest\u ind(case,ctrl,axis=1,equal\u var=False)
。我不知道这对我来说是否可行,因为我有一个csv文件,有多个列标记为
0
1
。我为它做了
case=df.xs('0',axis=1,level=0)。dropna()
ctrl=df.xs('1',axis=1,level=0)。dropna()。还有其他方法吗?