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

为何Pandas导出大数字至CSV/Excel时数值会改变?技术咨询

这不是Bug,是浮点数精度与默认类型推断导致的问题

首先得明确:你遇到的数值变样和科学计数法显示,本质是float64类型的精度限制加上Pandas默认的数值类型推断逻辑导致的,并不是Pandas的Bug。

为什么会出现这个问题?

float64(双精度浮点数)最多只能精确表示到2^53(约9.007e15)的整数。你的数值34032872653290899这类远大于这个范围,当Pandas默认把这些大整数推断为float64类型时,它们会被自动近似成最接近的可表示浮点数——这就是为什么你看到数值变成了34032872653290900这类近似值。同时,当数值过大时,Excel和CSV默认会用科学计数法显示这些浮点数。

解决方案:从根源上保留精确数值

针对你的场景,有几个可靠的解决办法:

1. 把列转换为字符串类型(最直接)

在保存文件前,将目标列转为字符串类型,这样无论保存成CSV还是Excel,都会完整保留原始数值,不会出现精度丢失或科学计数法:

# 假设你的DataFrame是df,目标列名为'numbers'
df['numbers'] = df['numbers'].astype(str)

# 保存CSV
df.to_csv('output.csv', index=False)

# 保存Excel
df.to_excel('output.xlsx', index=False)

2. 保存Excel时指定数值格式(适合需保留数值类型的场景)

如果需要在Excel里仍以数值格式显示(而非字符串),可以用xlsxwriter引擎自定义单元格格式,强制以普通数值显示,避免科学计数法:

import pandas as pd

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

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

# 创建格式:用'0'表示显示所有整数位,避免科学计数法
num_format = workbook.add_format({'num_format': '0'})
# 应用格式到第一列(假设你的数据在A列)
worksheet.set_column('A:A', None, num_format)

writer.save()

3. 先检查列类型确认问题

你可以先输出DataFrame的列类型,确认是不是float64导致的问题:

print(df.dtypes)

如果显示float64,就说明确实是类型推断引发的精度丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:02:36