熊猫读取带有浮点值的csv文件会导致奇怪的舍入和十进制数字
我有一个csv文件,其中包含数字值1524.449677
。总是精确地有6位小数。
当我通过pandas导入csv文件(和其他列)时read_csv
,该列会自动获取datatype
object
。我的问题是这些值显示为2470.6911370000003
实际应有的值2470.691137
。或该值2484.30691
显示为2484.3069100000002
。
在某种程度上,这似乎是一个数据类型问题。我尝试通过read_csv
将dtype
参数指定为来通过显式提供数据类型{'columnname':
np.float64}
。问题仍然没有解决。
如何获取导入的值并完全按源csv文件中的值显示?
-
熊猫使用专用的
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