我有一个csv文件,其中包含数字值1524.449677。总是精确地有6位小数。
1524.449677
当我通过pandas导入csv文件(和其他列)时read_csv,该列会自动获取datatype object。我的问题是这些值显示为2470.6911370000003实际应有的值2470.691137。或该值2484.30691显示为2484.3069100000002。
read_csv
object
2470.6911370000003
2470.691137
2484.30691
2484.3069100000002
在某种程度上,这似乎是一个数据类型问题。我尝试通过read_csv将dtype参数指定为来通过显式提供数据类型{'columnname': np.float64}。问题仍然没有解决。
dtype
{'columnname': np.float64}
如何获取导入的值并完全按源csv文件中的值显示?
熊猫使用专用的dec 2 bin转换器,会优先于速度而降低精度。
dec 2 bin
传递float_precision='round_trip'给read_csv修复了这个。
float_precision='round_trip'
请查看此页面以获取更多详细信息。
处理完数据后,如果要将其保存回 csv 文件中,则可以传递 float_format = "%.nf"给相应的方法。
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