使用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
相关产品推荐
相关产品推荐

