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

pandas结合xlsxwriter导出Excel时如何避免数值显示为科学计数法

问题根因
  • Excel默认使用「常规」单元格格式时,长度超过11位的数值会自动以科学计数法展示,你查询得到的12位int8类型值刚好触发该规则,此时单元格底层存储的数值本身是准确的,仅显示格式不符合预期。
  • 你当前配置的strings_to_numbers: True参数仅负责将文本类数字转换为数值类型,不会修改单元格默认显示格式,因此无法解决科学计数法显示问题。
可行解决方案

方案1:指定列的数字显示格式(推荐,不改变数值类型,支持Excel内直接做数值计算)

通过xlsxwriter的格式接口,给长整型字段对应的列设置纯数字格式,从根本上避免科学计数法触发,代码示例:

# 原有业务逻辑保持不变
excel_writer = ExcelWriter(
    self.fullFilePath, engine="xlsxwriter",
    engine_kwargs={'options': {'strings_to_numbers': True}}
)
frame = DataFrame(SQLResults[0])
frame.to_excel(excel_writer, sheet_name="Sheet1", index=False)

# 新增格式配置代码
workbook = excel_writer.book
worksheet = excel_writer.sheets["Sheet1"]
# 定义长数字格式:直接展示完整数值,不使用科学计数法、不添加千分位
long_number_format = workbook.add_format({"num_format": "0"})
# 定位长整型字段对应的列索引,避免列顺序变动导致配置失效
target_col_index = frame.columns.get_loc("some_12_long_integer")
# 给目标列设置格式,列宽设为15足够完整展示12位数字
worksheet.set_column(target_col_index, target_col_index, 15, long_number_format)

excel_writer.close()

方案2:将长整型字段转为文本写入(适合无需在Excel内做数值计算的场景)

写入Excel前将对应列转换为字符串类型,Excel会将其识别为文本内容,不会自动转科学计数法。该方法的缺点是后续在Excel中对该列做求和、统计等数值运算时,需要先手动转换格式:

frame["some_12_long_integer"] = frame["some_12_long_integer"].astype(str)
# 后续执行原有to_excel逻辑即可
注意事项

如果是长度超过15位的长数字(比如18位身份证号、19位雪花算法ID),不要用数值格式存储到Excel——Excel本身的数值精度仅支持15位,超过15位的部分会被强制置为0,这类场景必须用文本格式存储。你当前使用的12位int8数值不存在精度问题,优先使用方案1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:01:00