ОНОВЛЕННЯ: Відповідь була точною на момент написання, і точність з плаваючою комою все ще не є тим, що ви отримуєте за замовчуванням за допомогою 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, як зазвичай, і ви отримаєте ці цілі цифри назад. Потім перетворіть ці значення в плаваючу крапку, поділивши на той самий коефіцієнт, який ви множили раніше.