ОБНОВЛЕНИЕ: ответ был точным на момент написания, и точность с плавающей запятой по-прежнему не является тем, что вы получаете по умолчанию с to_csv / read_csv (компромисс между точностью и производительностью; по умолчанию предпочтение отдается производительности).
В настоящее время существует аргумент для и аргумент для .float_format
pandas.DataFrame.to_csv
float_precision
pandas.from_csv
Оригинал все же стоит прочитать, чтобы лучше понять проблему.
Это была ошибка в пандах, не только в функции «to_csv», но и в «read_csv». Это не общая проблема с плавающей запятой, хотя правда, что арифметика с плавающей запятой - это предмет, требующий некоторой осторожности от программиста. Эта статья ниже немного разъясняет эту тему:
http://docs.python.org/2/tutorial/floatingpoint.html
Классический однострочный текст, показывающий "проблему" ...
>>> 0.1 + 0.1 + 0.1
0.30000000000000004
... который не отображает 0,3, как можно было бы ожидать. С другой стороны, если вы обрабатываете вычисления с использованием арифметики с фиксированной запятой и только на последнем этапе вы используете арифметику с плавающей запятой , все будет работать так, как вы ожидаете. Видеть это:
>>> (1 + 1 + 1) * 1.0 / 10
0.3
Если вам отчаянно нужно обойти эту проблему, я рекомендую вам создать другой файл CSV, который будет содержать все цифры как целые числа, например, умножение на 100, 1000 или другой коэффициент, который окажется удобным. Внутри вашего приложения прочтите файл CSV как обычно, и вы получите эти целые числа обратно. Затем преобразуйте эти значения в числа с плавающей запятой, разделив их на тот же коэффициент, который вы умножили ранее.