2011-12-07 15 views
30
aşağıdaki python komut çalıştırıyorum

:ValueError: yüzer dizeyi dönüştürmek olamazdı: id

ValueError: could not convert string to float: id 

Ben bundan karıştı:

#!/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] 

Ancak böyle hatalar var. yerine döngü kullanarak komut dosyası için bir interaktif bölümünde sadece bir hat için bu çalıştığınızda: Ben iyi çalışıyor

>>> 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...] 

.

Bunun hakkında biraz açıklama yapabilir mi? thx

cevap

27

: Ben bir tad kodunuzu temizledik.

Etkileşimli komut isteminde denediğinizde, yalnızca ilk satırı deniyorsunuz, bu nedenle, bu hatayı aldığınız satırın yazdırılması en iyi yoldur ve yanlış satırı, örn.

#!/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] 
+6

Bu, csv dosyasındaki boş bir dizeyi yakalamada yardımcı oldu. –

7

Bu hata oldukça ayrıntılı şudur: metin dosyasına

ValueError: could not convert string to float: id 

yerde bir çizgi gerçekten bir sayıya dönüştürülemez o kelimeyi id sahiptir.

Test kodunuz, sözcüğü line 2 ürününde mevcut olmadığından çalışır. Bu satırı yakalamak istiyorsanız, bu kodu deneyin. Özellikle bazı satır yüzer dönüştürülemez metni id var, geçerli şamandıra veri yoksa Açıkçası sizin hatlarının bazı

#!/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] 
3

Verileriniz beklediğiniz gibi olmayabilir - beklediğiniz gibi görünüyor, ancak dalga geçmiyor.

Benim hata çok basitti
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] 
12

: verileri içeren metin dosyası bazı boşluk vardı

bu olurdu oluşur endam için basit bir çözüm için-döngü dışında/denemeye eklemek Son satırda (görünmez) karakter.
Bir grep çıktısı olarak, sadece 45 yerine 45  vardı.

Sizi saatlerce kılan klasik aptal şey. :-)

+1

Boşluklar ve sekmeler görülebilir;) Satır sonu ve alikes, örneğin, '\ n',' \ r' karakterleri değildir. –

0

Belki de sayılarınız aslında sayı değil, rakam olarak maskeleme harfleri midir?

Benim durumumda, kullandığım yazı tipi "l" ve "1" in çok benzer olduğunu gösteriyordu. '11919' diye düşündüğüm 'l1919' gibi bir dizim vardı ve bu da işleri karıştırdı.