AGGIORNAMENTO: la risposta era accurata al momento della scrittura e la precisione in virgola mobile non è ancora qualcosa che si ottiene per impostazione predefinita con to_csv / read_csv (compromesso precisione-prestazioni; i valori predefiniti favoriscono le prestazioni).
Al giorno d'oggi c'è l' float_format
argomento disponibile perpandas.DataFrame.to_csv
e l' float_precision
argomento disponibile perpandas.from_csv
.
Vale ancora la pena leggere l'originale per avere una migliore comprensione del problema.
Era un bug nei panda, non solo nella funzione "to_csv", ma anche in "read_csv". Non è un problema generale in virgola mobile, nonostante sia vero che l' aritmetica in virgola mobile è un argomento che richiede una certa attenzione da parte del programmatore. Questo articolo di seguito chiarisce un po 'questo argomento:
http://docs.python.org/2/tutorial/floatingpoint.html
Un classico one-liner che mostra il "problema" è ...
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... che non mostra 0,3 come ci si aspetterebbe. D'altra parte, se gestisci il calcolo utilizzando l' aritmetica in virgola fissa e solo nell'ultimo passaggio utilizzi l' aritmetica in virgola mobile , funzionerà come previsto. Guarda questo:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
Se hai un disperato bisogno di aggirare questo problema, ti consiglio di creare un altro file CSV che contenga tutte le cifre come numeri interi, ad esempio moltiplicando per 100, 1000 o altro fattore che risulta conveniente. All'interno dell'applicazione, leggi il file CSV come al solito e otterrai indietro quelle cifre intere. Quindi converti quei valori in virgola mobile, dividendoli per lo stesso fattore che hai moltiplicato prima.