2016-12-20 6 views
0

Mein Skript ist Kommissionierung eine Zeichenfolge, wenn es nicht sollte, ichPython, Valueerror: string nicht konvertieren konnte zu schweben:

ValueError: could not convert string to float: for line list_col.append(float(row[c].strip('"'))) in the code below

with open(fileTwoName) as f: 

    reader = csv.reader(f, delimiter=",") 
    fileTwoColumnNames = next(reader) 
    output_column .extend(fileTwoColumnNames[2:-1]) 
    number_of_columns = len(fileTwoColumnNames)-2 


    for c in range(2,number_of_columns+2): 
     list_col = [] 
     f.seek(1) 
     next(reader) 
     for row in reader: 
      list_col.append(float(row[c].strip('"'))) 

     list_col_name_wise = [] 
     for k in range(0, len(number_eng)): 
      list_col_name_wise.append(sum(list_col[start_row[k] - 1:start_row[k] - 1 + 1- total_case [k]])) 
     data.append(list_col_name_wise) 

ich es durch Zugabe von

if list_col == str: 
    list_col.append(float(row[c].strip('"'))) ` 

getestet erhalten alles funktioniert ok, aber ich brauche meine data Liste als Float ausgeben. Gibt es eine Möglichkeit für mich, sowohl eine Str und Float zu erklären?

+4

Ich vermute, dass Ihre Daten falsch formatiert sind: Fügen Sie eine Zeile 'print row [c] .strip (' '') 'vor der fehlerhaften Zeile hinzu und das letzte Ergebnis vor dem Fehler. – TemporalWolf

+2

Lesen Sie den Fehler: Zeichenfolge kann nicht in Float konvertiert werden. 'row [c] .strip ('" "')' ist eine Zeichenkette, die nur einen Gleitkommawert und eventuell Leerzeichen enthalten sollte, andernfalls wird 'float (...)' mit dem angezeigten Fehler –

Antwort

1

Ihre Daten sind fehlerhaft und Sie erhalten leere Zeichenfolgen ''. Sie können entweder ignorieren oder einige Standardwert hinzu:

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     # Empty string 
     if row[c].strip('" ') == '': 
      list_col.append(0.0) 
      # or 
      pass # ignore 
     else: 
      raise 

Sie müssen nur entscheiden, wie mit leeren Zeichenfolgen behandeln: einige Standardwert anhängen oder sie überspringen.

+0

I fehlschlagen sehe nichts als Leerraum in meiner Ipython-Konsole, aber es gibt einige Daten als Float aus. Was kann ich tun, um dieses Problem zu beheben, ich bin sehr neu zu Python – MiguelA

+0

@MiguelA können Sie die Ausgabe von diesem zu Ihrer Frage hinzufügen? – TemporalWolf

+0

Leider geht meine Ausgabe zu einer CSV-Datei, die sehr groß ist. Die gedruckten Daten in der Konsole nach dem Hinzufügen der Fehlerprüfung ist nur leerer Leerraum, der für eine Weile weiterläuft, bis der Durchlauf beendet wird. – MiguelA

0

durch Ihre Kommentare sehen aus wie Sie etwas zu diesem Effekt

>>> float(" ") 

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    float(" ") 
ValueError: could not convert string to float: 
>>> 

und natürlich können Sie nicht ein Schwimmer aus einem String bekommen werden, die mit keine Zahl enthalten zu starten.

Sie haben 2 Möglichkeiten, diesen Wert ignorieren und mit der nächsten weiter, oder einen Standardwert wie 0 oder einem anderen geeigneten Wert verwenden, wenn das

passiert irgendetwas davon zu tun, ist sehr einfach mit dem try-except

es

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     print("Error with row",c,":",row[c]) 
     pass 

zu ignorieren tun oder einen Standardwert zu verwenden, anstatt tun

for row in reader: 
    try: 
     list_col.append(float(row[c].strip('"'))) 
    except ValueError: 
     print("Error with row",c,":",row[c]) 
     list_col.append(0.0) 

(Ausdrucke sind optional)

+0

Danke, diese Lösung funktioniert auch. – MiguelA

Verwandte Themen