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

发布于 2021-01-29 19:15:12

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

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

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

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

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    熊猫使用专用的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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看