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

38
demandé sur mskfisher 2011-12-07 21:57:05

5 réponses

id qui ne peut pas être converti en flotteur.

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]
34
répondu Anurag Uniyal 2015-01-04 21:07:27

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

14
répondu Sopalajo de Arrierez 2018-06-19 07:07:13

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]
9
répondu Blender 2011-12-07 17:59:46

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]
3
répondu Matt Fenwick 2011-12-07 18:02:49

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.

1
répondu Tom Roth 2018-03-02 06:53:32