将Pandas DataFrame保存为CSV文件时如何避免数值精度丢失
pandas导出CSV保留浮点数列完整精度的解决方法
很多时候你看到的精度丢失并不是pandas导出时导致的,而是用Excel打开CSV文件时,Excel默认自动截断长小数、转科学计数法导致的,你可以先用纯文本编辑器(比如VS Code、记事本、Sublime Text等)打开导出的CSV文件确认数值是否真的丢失。
如果确认是pandas导出时丢失精度,可按以下方法解决:
方法1:将目标列转为字符串后导出
这是最稳妥的方法,转成字符串后导出不会触发任何浮点自动格式化:
# 转为保留8位小数的字符串,避免出现科学计数法 df['Quantity'] = df['Quantity'].apply(lambda x: f"{x:.8f}") # 导出时不需要额外加float_format参数 df.to_csv(r'/Users/Example.csv', index=False)
方法2:使用decimal模块处理浮点精度
如果需要保留数值属性导出,可以用高精度的decimal类型处理:
from decimal import Decimal, getcontext # 设置精度足够覆盖你的小数位数 getcontext().prec = 12 df['Quantity'] = df['Quantity'].apply(lambda x: Decimal(str(x)).quantize(Decimal('0.00000001'))) # 导出时指定float_format df.to_csv(r'/Users/Example.csv', index=False, float_format='%.8f')
注意事项
- 你之前的操作同时做了列转字符串和加float_format参数,float_format仅对浮点类型列生效,对字符串列无影响,不会起到额外的精度保护作用。
- 如果是Excel打开时的显示问题,你可以在导入Excel时将Quantity列指定为文本格式,就可以看到完整的小数位数。
内容的提问来源于stack exchange,提问作者Tcs106
相关产品推荐
相关产品推荐

