2016-07-25 11 views
1

Ich versuche, die 22. Spalte mit Zahlen zwischen 0.10 und 1.00 in Day.csv zu filtern. Aber einige dieser Zellen leer sind ohne Zahl überhaupt nicht und verursachen einen Fehler:Null/leere Zellen mit Filter ignorieren

ValueError: could not convert string to float:

Hier ist, was ich versucht:

reader = csv.reader(open("AllData.csv"), delimiter=',') 
    filteredDay = filter(lambda p:0.10 <= float(p[23]) <= 1.00, reader) 
    csv.writer(open(r"{}\Day.csv".format(queue),'w',newline =''), 
       delimiter=',').writerows(filteredDay) 

Antwort

3

Vermutlich müssen Sie daher Ihren Filter False zurückgeben, wenn die betreffende Zelle keinen Wert enthält? Versuchen:

filteredDay = filter(lambda p: p[23] != "" and 
           0.10 <= float(p[23]) <= 1.00, reader) 
2

Sie einen ternären bedingten können False für Zuschnitte zurückzukehren :

filteredDay = filter(lambda p: 0.10 <= float(p[23]) <= 1.00 if p[23] != '' 
           else False, reader) 
#               ^^^^^^^^^^^^^^ 
+0

'sonst false' ist in der Regel ein guter Hinweis darauf, dass Ihr Booleschen Ausdruck effizienten – holdenweb

+0

@holdenweb Yep neu geschrieben werden könnte, das ist richtig. Indem Sie den Ausdruck selbst verwenden –