UPDATE: Die Antwort war zum Zeitpunkt des Schreibens korrekt, und Gleitkomma-Genauigkeit wird standardmäßig immer noch nicht mit to_csv / read_csv erhalten (Kompromiss zwischen Präzision und Leistung; Standardeinstellungen begünstigen die Leistung).
Heutzutage gibt es das float_format
Argument fürpandas.DataFrame.to_csv
und das float_precision
Argument fürpandas.from_csv
.
Das Original ist immer noch lesenswert, um das Problem besser zu verstehen.
Es war ein Fehler in Pandas, nicht nur in der Funktion "to_csv", sondern auch in "read_csv". Es ist kein allgemeines Gleitkomma-Problem, obwohl es stimmt, dass Gleitkomma-Arithmetik ein Thema ist, das vom Programmierer etwas Sorgfalt verlangt. Dieser Artikel unten verdeutlicht ein wenig dieses Thema:
http://docs.python.org/2/tutorial/floatingpoint.html
Ein klassischer Einzeiler, der das "Problem" zeigt, ist ...
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... die nicht wie erwartet 0,3 anzeigt. Wenn Sie die Berechnung jedoch mit Festkomma-Arithmetik durchführen und erst im letzten Schritt Gleitkomma-Arithmetik verwenden , funktioniert sie wie erwartet. Sieh dir das an:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
Wenn Sie dieses Problem dringend umgehen müssen, empfehle ich Ihnen, eine weitere CSV-Datei zu erstellen, die alle Zahlen als Ganzzahlen enthält, z. B. Multiplikation mit 100, 1000 oder einem anderen Faktor, der sich als praktisch herausstellt. Lesen Sie in Ihrer Anwendung die CSV-Datei wie gewohnt, und Sie erhalten diese ganzzahligen Zahlen zurück. Konvertieren Sie diese Werte dann in Gleitkommawerte, indem Sie sie durch denselben Faktor dividieren, den Sie zuvor multipliziert haben.