bet*_*eta 12 python csv floating-point rounding pandas
我有一个包含数值的csv文件,如1524.449677
.总有6个小数位.
当我通过pandas导入csv文件(和其他列)时read_csv
,该列自动获取数据类型object
.我的问题是价值显示为2470.6911370000003
实际应该是2470.691137
.或者值2484.30691
显示为2484.3069100000002
.
这似乎是某种方式的数据类型问题.我试图read_csv
通过给出dtype
参数来导入via时显式提供数据类型{'columnname': np.float64}
.问题仍然没有消失.
如何在源csv文件中获取导入和显示的值?
Pau*_*one 14
Pandas使用专用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
Run Code Online (Sandbox Code Playgroud)
小智 9
我意识到这是一个老问题,但也许这会对其他人有所帮助:
我有一个类似的问题,但不能完全使用相同的解决方案。不幸的是,该float_precision
选项仅在使用 C 引擎时存在,而在 python 引擎中不存在。因此,如果您出于其他原因必须使用 python 引擎(例如,因为 C 引擎无法将正则表达式文本作为分隔符处理),那么这个小“技巧”对我有用:
在pd.read_csv
参数中,定义dtype='str'
然后将您的数据帧转换为您想要的任何 dtype,例如df = df.astype('float64')
.
有点黑客,但它似乎有效。如果有人对如何以更好的方式解决此问题有任何建议,请告诉我。
归档时间: |
|
查看次数: |
6016 次 |
最近记录: |