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

如何避免Pandas DataFrame导出CSV时ID变为科学计数法?

导出DataFrame到CSV时ID列被转为科学计数法的问题

模拟DataFrame代码:

import pandas as pd
sof = pd.DataFrame({
    'id':['1580326032400705442181105','15803260000063243713608360','1580326343500677412104013','15803260343000000705432103406'],
    'class':['a','c','c','d']
})

使用to_csv导出后,ID列被自动转为科学计数法(如1.5803260324007E+24),有两个疑问:

  1. 为何Python会将明显为object类型的列转换为数值格式?
  2. 如何保留ID的原始格式?

已尝试的方法及问题:

  • 使用float_format='%f'参数导出:
    sof.to_csv('path',float_format='%f',index = False)
    
    无效果。
  • 将id列转为int再转string:
    sof['id'].astype(int).astype(str)
    
    报错:OverflowError: Python int too large to convert to C long

解答

1. 为什么object类型列导出后显示为科学计数法?

不是Python/pandas把object列转成了数值格式,pandas导出CSV时会完整保留字符串的原始内容。问题出在打开CSV的工具(比如Excel):工具会自动识别长数字串为数值类型,但这类超长ID超出了工具数值类型的存储范围,于是自动用科学计数法显示。

2. 保留ID原始格式的解决方法

方法1:给ID列添加单引号前缀

让工具将ID识别为文本类型,避免自动转数值:

# 给每个ID前加单引号
sof['id'] = "'" + sof['id']
# 导出CSV
sof.to_csv('your_path/filename.csv', index=False)

打开CSV时,单引号会让工具(如Excel)将ID视为文本,完整显示原始内容。

方法2:使用quoting参数强制包裹非数值列

借助csv模块的参数,让pandas导出时用引号包裹所有非数值列,工具会识别为文本:

import csv
sof.to_csv('your_path/filename.csv', index=False, quoting=csv.QUOTE_NONNUMERIC)

方法3:确保ID列始终为字符串类型(避免不必要的类型转换)

你之前尝试转int再转string报错,是因为numpy的int类型有长度限制(受C long的范围约束),但Python原生的字符串完全可以存储超长ID,所以不需要转int,直接保持ID列的字符串类型即可。只要导出时确保列类型是object(字符串),再配合上面的方法,就能避免科学计数法问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:30:55