Ich habe eine CSV mit Zahlen, die ich in Floats umwandeln möchte.Warum zeigt Python 'ValueError: String konnte nicht in Float umgewandelt werden?
filename = "filename.csv"
enclosed_folder = "path/to/Folder"
full_path = os.path.join(enclosed_folder,filename)
with open(full_path) as input_data:
temp = input_data.readlines()
n = len(temp) #int(temp.pop(0))
matrix = [x.split(" ") for x in temp]
for i in range(n):
for j in range(n):
matrix[i][j] = float(matrix[i][j])
input_data.close()
Wenn ich die Datei in einem beliebigen Texteditor öffnen, es zeigt nicht die \n
am Ende jeder Zeile.
Aber das Python-Code ausgeführt wird zeigt die `Valueerror: nicht String umwandeln könnte‚wegen ‚\ n zu schweben‘ am Ende jeder Zeile vorhanden ist.
Traceback (most recent call last):
File "hierarchical-clustering.py", line 37, in <module>
matrix[i][j] = float(matrix[i][j])
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429\n'
Also, wie behebe ich diesen Fehler?
EDIT: verwendete ich strip()
sowie rstrip()
wie in einigen der Antworten vorgeschlagen Leerzeichen zu entfernen, aber der Fehler geht nicht weg:
Traceback (most recent call last):
File "hierarchical-clustering.py", line 37, in <module>
matrix[i][j] = float(matrix[i][j].rstrip())
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429'
Ich glaube nicht 'float' kümmert sich um neue Zeilen. Ich habe gerade 'float (" 1.0 \ n ")' auf meinem Rechner versucht und es gibt mir glücklicherweise '1.0'. Ich denke, das Problem sind deine Kommas. 'float (" 1,2 ")' funktioniert beispielsweise nicht. – Kevin
Haben Sie darüber nachgedacht, das 'csv'-Modul zum Lesen Ihrer CSV-Datei zu verwenden? Wenn Sie das verwenden, anstatt die Datei manuell zu analysieren, führt IIRC in Ihrem Auftrag eine rudimentäre Typkonvertierung durch. Dann müssen Sie überhaupt nicht 'float' aufrufen. – Kevin
@Kevin - Nein, Pythons 'csv' nimmt keine Typen an. Es berücksichtigt absichtlich alles eine Schnur. (Dies ist sowohl mehr Pythonic (explizit ist besser als implizit) und vermeidet eines der Dinge, die Programmierer am meisten über Excel hassen.) –