MISE À JOUR: La réponse était précise au moment de l'écriture, et la précision en virgule flottante n'est toujours pas quelque chose que vous obtenez par défaut avec to_csv / read_csv (compromis précision-performances; les valeurs par défaut favorisent les performances).
De nos jours, il y a l' float_format
argument disponible pourpandas.DataFrame.to_csv
et l' float_precision
argument disponible pourpandas.from_csv
.
L'original vaut toujours la peine d'être lu pour mieux appréhender le problème.
C'était un bug dans les pandas, non seulement dans la fonction "to_csv", mais aussi dans "read_csv". Ce n'est pas un problème général en virgule flottante, même s'il est vrai que l' arithmétique en virgule flottante est un sujet qui demande une certaine attention de la part du programmeur. Cet article ci-dessous clarifie un peu ce sujet:
http://docs.python.org/2/tutorial/floatingpoint.html
Un one-liner classique qui montre le "problème" est ...
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... qui n'affiche pas 0,3 comme on pourrait s'y attendre. D'un autre côté, si vous gérez le calcul en utilisant l' arithmétique en virgule fixe et que vous n'utilisez l' arithmétique en virgule flottante qu'à la dernière étape , cela fonctionnera comme prévu. Regarde ça:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
Si vous avez désespérément besoin de contourner ce problème, je vous recommande de créer un autre fichier CSV contenant tous les chiffres sous forme d'entiers, par exemple en multipliant par 100, 1000 ou tout autre facteur qui s'avère pratique. Dans votre application, lisez le fichier CSV comme d'habitude et vous récupérerez ces nombres entiers. Puis convertissez ces valeurs en virgule flottante, en divisant par le même facteur que vous avez multiplié auparavant.