更新:在撰写本文时答案是准确的,并且浮点精度仍然不是您默认使用 to_csv/read_csv 获得的(精度-性能权衡;默认值有利于性能)。
现在有可用于的float_format
pandas.DataFrame.to_csv
论据和可用于的float_precision
论据pandas.from_csv
。
原著仍然值得阅读,以更好地理解这个问题。
这是 pandas 中的一个错误,不仅在“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 文件,您将获得这些整数数字。然后将这些值转换为浮点数,除以您之前乘以的相同因子。