处理超长数字字符串时,如何避免Pandas.to_excel的数据丢失
问题描述
我的输入CSV文件内容如下:
| id1,id2 |
|---|
| 233924749247492472,9284372492472497294749 |
| 298347230474308444,9472943274947429427477 |
我需要将这个文件读取为DataFrame后,写入.xlsx文件,但不能丢失数据。
已尝试的代码
- 尝试1:
df2 = pd.read_csv(path, sep=Delimiter, float_precision=None ) pd.options.display.float_format = '{:.1f}'.format df2.to_excel(filepath, index=False)
- 尝试2:
df2 = pd.read_csv(path, sep=delimiter) writer = pd.ExcelWriter(path, engine=None) df3.to_excel(writer, index=False)
- 尝试3:
df2 = pd.read_csv(path, sep=delimiter) df3.to_excel(path, index=False)
问题现象
每次运行后得到的Excel文件结果都一样,第一列数据出现精度丢失:
| id1 | id2 |
|---|---|
| 233924749247493000 | 9284372492472497294749 |
| 298347230474309000 | 9472943274947429427477 |
解决方案
问题出在大整数被pandas默认解析为浮点数,导致精度丢失。解决办法是读取CSV时指定列的类型为字符串,避免自动转换:
方法1:指定dtype参数
import pandas as pd # 读取时指定id1和id2为字符串类型 df = pd.read_csv(path, sep=',', dtype={'id1': str, 'id2': str}) # 写入Excel df.to_excel(filepath, index=False)
方法2:使用converters参数
如果需要更灵活的转换,可以用converters对指定列处理:
import pandas as pd # 转换指定列为字符串 df = pd.read_csv(path, sep=',', converters={'id1': str, 'id2': str}) df.to_excel(filepath, index=False)
这样写入Excel后,两列的原始数值都会完整保留,不会出现精度丢失的问题。
内容的提问来源于stack exchange,提问作者Lal Ansari
相关产品推荐
相关产品推荐

