ValueError: impossible de convertir string en float: id
j'exécute le script python suivant:
#!/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]
Cependant, je dois les erreurs de la forme:
ValueError: could not convert string to float: id
je suis confus par ce. Quand j'essaie ceci pour une seule ligne dans la section interactive, au lieu de pour boucle en utilisant script:
>>> 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...]
je travaille bien.
quelqu'un Peut-il expliquer un peu plus? thx
5 réponses
lorsque vous l'essayez dans l'invite interactive, vous essayez seulement la première ligne, donc la meilleure façon est d'Imprimer la ligne où vous obtenez cette erreur et vous connaîtrez la mauvaise ligne par exemple
#!/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]
mon erreur était très simple: le fichier texte contenant les données avait un espace (donc non visible) sur la dernière ligne.
en sortie de grep, j'avais 45
au lieu de 45
.
Cette erreur est assez verbeux:
ValueError: could not convert string to float: id
quelque part dans votre fichier texte, une ligne a le mot id
, qui ne peut pas vraiment convertir en nombre.
votre code de test fonctionne parce que le mot id
n'est pas présent dans line 2
.
Si vous voulez attraper cette ligne, essayez ce code. J'ai nettoyé votre code en place d'un tad:
#!/usr/bin/python
import os, sys
from scipy import stats
import numpy as np
for index, line in enumerate(open('data2.txt', 'r').readlines()):
w = line.split(' ')
l1 = w[1:8]
l2 = w[8:15]
try:
list1 = map(float, l1)
list2 = map(float, l2)
except ValueError:
print 'Line {i} is corrupt!'.format(i = index)'
break
result = stats.ttest_ind(list1, list2)
print result[1]
vos données peuvent ne pas être ce que vous attendez -- il semble que vous attendez, mais pas obtenir, des flotteurs.
une solution simple pour déterminer où cela se produit serait d'ajouter un try / sauf à la boucle for:
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:
# report the error in some way that is helpful -- maybe print out i
result=stats.ttest_ind(list1,list2)
print result[1]
peut-être vos chiffres ne sont-ils pas en fait des chiffres, mais des lettres déguisées en chiffres?
dans mon cas, la police que j'utilisais signifiait que "l" et "1" ressemblaient beaucoup. J'avais une chaîne comme "l1919" que je pensais être "11919" et qui a tout fichu en l'air.