UPDATE : La réponse était exacte au moment de l'écriture, et la précision des virgules flottantes n'est toujours pas obtenue par défaut avec to_csv/read_csv (compromis précision-performance ; les valeurs par défaut favorisent les performances).
De nos jours, il y a le site float_format
argument disponible pour pandas.DataFrame.to_csv
y le site float_precision
argument disponible pour pandas.from_csv
.
L'original vaut tout de même la peine d'être lu pour mieux cerner le problème.
Il s'agit d'un bug dans pandas, non seulement dans la fonction "to_csv", mais aussi dans "read_csv". Il ne s'agit pas d'un problème général de virgule flottante, même s'il est vrai que la fonction arithmétique à virgule flottante est un sujet qui exige une certaine attention de la part du programmeur. L'article ci-dessous clarifie un peu ce sujet :
http://docs.python.org/2/tutorial/floatingpoint.html
Une phrase classique qui montre que 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 effectuez le calcul en utilisant arithmétique à virgule fixe et seulement dans la dernière étape vous employez arithmétique à virgule flottante il fonctionnera comme vous le souhaitez. Regardez ç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 qui contient tous les chiffres sous forme d'entiers, par exemple en les 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 obtiendrez ces chiffres entiers en retour. Ensuite, convertissez ces valeurs en virgule flottante, en les divisant par le même facteur que vous avez multiplié auparavant.