一尘不染

熊猫读取带有浮点值的csv文件会导致奇怪的舍入和十进制数字

python

我有一个csv文件,其中包含数字值1524.449677。总是精确地有6位小数。

当我通过pandas导入csv文件(和其他列)时read_csv,该列会自动获取datatype
object。我的问题是这些值显示为2470.6911370000003实际应有的值2470.691137。或该值2484.30691显示为2484.3069100000002

在某种程度上,这似乎是一个数据类型问题。我尝试通过read_csvdtype参数指定为来通过显式提供数据类型{'columnname': np.float64}。问题仍然没有解决。

如何获取导入的值并完全按源csv文件中的值显示?


阅读 139

收藏
2020-12-20

共1个答案

一尘不染

熊猫使用专用的dec 2 bin转换器,会优先于速度而降低精度。

传递float_precision='round_trip'read_csv修复了这个。

请查看此页面以获取更多详细信息。

处理完数据后,如果要将其保存回 csv 文件中,则可以传递
float_format = "%.nf"给相应的方法。

完整示例:

import pandas as pd

df_in  = pd.read_csv(source_file, float_precision='round_trip')
df_out = ... # some processing of df_in
df_out.to_csv(target_file, float_format="%.3f") # for 3 decimal places
2020-12-20