我正在运行以下python脚本:
#!/usr/bin/python import os,sys from scipy import stats import numpy as np f=open('data2.txt', 'r').readlines() N=len(f)-1 for i in range(0,N): w=f[i].split() l1=w[1:8] l2=w[8:15] list1=[float(x) for x in l1] list2=[float(x) for x in l2] result=stats.ttest_ind(list1,list2) print result[1]
但是我得到了类似的错误:
ValueError: could not convert string to float: id
我对此感到困惑。当我在交互式部分中仅尝试一行时,而不是使用脚本进行for循环时:
>>> from scipy import stats >>> import numpy as np >>> f=open('data2.txt','r').readlines() >>> w=f[1].split() >>> l1=w[1:8] >>> l2=w[8:15] >>> list1=[float(x) for x in l1] >>> list1 [5.3209183842, 4.6422726719, 4.3788135547, 5.9299061614, 5.9331108706, 5.0287087832, 4.57...]
它运作良好。
有人可以解释一下吗?谢谢。
显然,您的某些行没有有效的float数据,特别是某些行的文本id无法转换为float。
id
当您在交互式提示中尝试它时,您仅尝试第一行,因此最好的方法是在出现此错误的地方打印行,您将知道错误的行,例如
#!/usr/bin/python import os,sys from scipy import stats import numpy as np f=open('data2.txt', 'r').readlines() N=len(f)-1 for i in range(0,N): w=f[i].split() l1=w[1:8] l2=w[8:15] try: list1=[float(x) for x in l1] list2=[float(x) for x in l2] except ValueError,e: print "error",e,"on line",i result=stats.ttest_ind(list1,list2) print result[1]