我有一个csv文件,包含1524.449677
之类的数值。小数点后总是正好有6位。
当我通过panda read_csv
导入csv文件(和其他列)时,该列自动获得数据类型object
。我的问题是,值显示为2470.6911370000003
,而实际上应该是2470.691137
。或者值2484.30691
显示为2484.3069100000002
。
在某种程度上,这似乎是一个数据类型问题。我试图在通过read_csv
导入时显式地提供数据类型,方法是将dtype
参数指定为{'columnname': np.float64}
。但问题仍然没有解决。
如何导入这些值并使其与源csv文件中的值完全相同?
2条答案
按热度按时间bbmckpt71#
Pandas使用专用的
dec 2 bin
转换器,在精度和速度之间进行权衡。将
float_precision='round_trip'
传递给read_csv
可修复此问题。请查看此页面以了解更多详细信息。
处理完数据后,如果要将其保存回 csv 文件,可以通过
float_format = "%.nf"
Map至Map的方法。完整示例:
myzjeezk2#
我意识到这是一个老问题,但也许这会帮助其他人:
我也遇到过类似的问题,但是不能完全使用相同的解决方案。不幸的是,
float_precision
选项只在使用C引擎时存在,而在使用python引擎时不存在。所以,如果你因为其他原因而不得不使用python引擎(例如,因为C引擎不能处理regex文字作为分隔符),这个小“技巧”对我很有效:在
pd.read_csv
参数中,定义dtype='str'
,然后将 Dataframe 转换为所需的任何数据类型,例如df = df.astype('float64')
。有点黑客攻击,但似乎奏效了。如果有人对如何更好地解决这个问题有任何建议,请告诉我。