将管道分隔的平面文件管道化到python中,以便在Pandas和Stats中使用

将管道分隔的平面文件管道化到python中,以便在Pandas和Stats中使用,python,pipe,flat,Python,Pipe,Flat,我搜索了很多,但没有找到答案 我正在尝试将数据导入一个平面文件中,并将其放入python读取的内容中,这样我就可以进行分析(例如,执行t测试) 首先,我创建了一个简单的管道分隔平面文件: 并将其保存为“simpledata” 然后我用nano创建了一个bash脚本 #!/usr/bin/env python import sys from scipy import stats A = sys.stdin.read() print A paired_sample = stats.ttest_

我搜索了很多,但没有找到答案

我正在尝试将数据导入一个平面文件中,并将其放入python读取的内容中,这样我就可以进行分析(例如,执行t测试)

首先,我创建了一个简单的管道分隔平面文件:

并将其保存为“simpledata”

然后我用nano创建了一个bash脚本

#!/usr/bin/env python

import sys
from scipy import stats 

A = sys.stdin.read()
print A
paired_sample = stats.ttest_rel(A[:,0],A[:,1])
print "The t-statistic is %.3f and the p-value is %.3f." % paired_sample
然后将脚本保存为pairedtest.sh,并作为

 cat simpledata | pairedttest.sh
我得到的错误是

TypeError: string indices must be integers, not tuple

提前感谢您的帮助

您想打这个电话吗

paired_sample = stats.ttest_rel([1,3,4,1,2,3,8], [2,4,5,6,7,8,9])
如果是这样的话,你就不能用你正在尝试的方式去做
A
在从stdin读取时只是一个字符串,因此无法按尝试的方式对其编制索引。您需要从字符串构建这两个列表。最明显的方式是这样的:

left = []
right = []
for line in A.splitlines():
    l, r = line.split("|")
    left.append(int(l))
    right.append(int(r))
print left
print right
这将输出:

[1, 3, 4, 1, 2, 3, 8]
[2, 4, 5, 6, 7, 8, 9]
[(1, 3, 4, 1, 2, 3, 8), (2, 4, 5, 6, 7, 8, 9)]
因此,您可以调用
stats.ttest\u rel(左、右)

或者真的很聪明,用它写一行字(几乎不可能读出来):

z = zip(*[map(int, line.split("|")) for line in A.splitlines()])
这将输出:

[1, 3, 4, 1, 2, 3, 8]
[2, 4, 5, 6, 7, 8, 9]
[(1, 3, 4, 1, 2, 3, 8), (2, 4, 5, 6, 7, 8, 9)]

因此,您可以调用
stats.ttest_rel(*z)

您的错误来自
A[:,0]
A[:,1]
。去掉逗号,看看能不能解决问题。嗨,亚当,谢谢你。使用[:0]和[:1]会给我带来另一个错误
索引器错误:元组索引超出范围
您必须让我们知道另一个错误是什么,我们无法读取您的想法或您的计算机屏幕:)抱歉--我按enter键以为这将是一个新行。没什么大不了的——我想在@Dano的帮助下,我已经解决了或者差不多解决了:)谢谢,我知道有一种方法可以使用
zip
和glob unpacking来实现这一点。我要删除我的答案——你的答案更好。@AdamSmith感谢
splitlines()
提示!非常感谢你,达诺,我会试试这个@dano我想我差不多到了——但是现在我得到了错误
回溯(最后一次调用):文件“######/pairedtest.sh”,第23行,成对的#sample=stats.ttest_rel(左,右)文件“#/lib/python2.7/site packages/scipy/stats/stats.py”,第3379行,在ttest#rel d=(a-b.astype(np.float64)中TypeError:-:'numpy.ndarray'和'numpy.ndarray'的操作数类型不受支持。
在我对大型
a
的测试中,更简单的方法速度更快,这是毫无价值的。这并不奇怪,因为我们在“聪明”版本中多次迭代这些值。