ACTUALIZACIÓN: La respuesta era precisa en el momento de escribir este artículo, y la precisión del punto flotante aún no es algo que se obtiene de forma predeterminada con to_csv / read_csv (compensación precisión-rendimiento; los valores predeterminados favorecen el rendimiento).
Hoy en día existe el float_format
argumento disponible parapandas.DataFrame.to_csv
y el float_precision
argumento disponible parapandas.from_csv
.
Todavía vale la pena leer el original para comprender mejor el problema.
Fue un error en pandas, no solo en la función "to_csv", sino también en "read_csv". No es un problema general del punto flotante, a pesar de que es cierto que la aritmética del punto flotante es un tema que exige cierto cuidado por parte del programador. Este artículo a continuación aclara un poco este tema:
http://docs.python.org/2/tutorial/floatingpoint.html
Un clásico de una sola línea que muestra el "problema" es ...
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... que no muestra 0.3 como cabría esperar. Por otro lado, si maneja el cálculo usando aritmética de punto fijo y solo en el último paso emplea aritmética de punto flotante , funcionará como espera. Mira esto:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
Si necesita desesperadamente evitar este problema, le recomiendo que cree otro archivo CSV que contenga todas las cifras como números enteros, por ejemplo, multiplicando por 100, 1000 u otro factor que resulte conveniente. Dentro de su aplicación, lea el archivo CSV como de costumbre y obtendrá esas cifras enteras. Luego, convierta esos valores a punto flotante, dividiéndolos por el mismo factor que multiplicaste antes.