You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas to_excel导出Excel时浮点数精度失真问题求助

解决Pandas导出Excel浮点数精度失真问题

浮点数精度失真本质是二进制浮点数的存储特性导致的,以下是几种可行的解决办法:

方法1:转为字符串导出(简单直接,适合无需计算的场景)

把浮点数列转为字符串类型,确保Excel中显示的内容和DataFrame完全一致:

import pandas as pd

df = pd.DataFrame({'values': [0.019, 2.117, 9.999]})
# 将数值转为字符串,保留原精度
df['values'] = df['values'].astype(str)
df.to_excel('output.xlsx', index=False)

方法2:指定Excel数值格式(保留数值类型,支持计算)

利用openpyxl或XlsxWriter引擎,设置单元格的数字格式,强制显示指定小数位数,同时保证存储值的精度:

使用XlsxWriter(导出时直接设置格式)

import pandas as pd

df = pd.DataFrame({'values': [0.019, 2.117, 9.999]})

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
df.to_excel(writer, index=False, sheet_name='Sheet1')

# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Sheet1']

# 定义三位小数的格式
num_format = workbook.add_format({'num_format': '0.000'})

# 将格式应用到目标列(假设values在B列)
worksheet.set_column('B:B', None, num_format)

writer.close()

使用openpyxl(导出后修改格式)

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import numbers

df = pd.DataFrame({'values': [0.019, 2.117, 9.999]})
df.to_excel('output.xlsx', index=False, engine='openpyxl')

# 加载已导出的文件
wb = load_workbook('output.xlsx')
ws = wb.active

# 遍历目标列,设置三位小数格式(跳过表头行)
for cell in ws['B']:
    if cell.row != 1:
        cell.number_format = numbers.FORMAT_NUMBER_000

wb.save('output.xlsx')

方法3:使用Decimal类型存储(彻底解决二进制精度问题)

将浮点数转为Decimal类型,避免二进制浮点数的精度丢失,再导出到Excel:

import pandas as pd
from decimal import Decimal

df = pd.DataFrame({'values': [0.019, 2.117, 9.999]})
# 先转为字符串再转Decimal,保留原始精度
df['values'] = df['values'].apply(lambda x: Decimal(str(x)))
# 用openpyxl引擎导出
df.to_excel('output.xlsx', index=False, engine='openpyxl')

内容的提问来源于stack exchange,提问作者jigga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:25:07