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

Python导入/导出CSV文件时部分12位数值被舍入的问题

12位数值被舍入的问题排查与解决

为啥会出现这种情况?

首先排除Python本身的数值精度问题——Python的int支持任意长度整数,float对12位整数也能精确存储。你遇到的问题大概率是数据处理环节的无意取整或格式设置错误,常见场景:

  • 读取/导出CSV时用了错误的格式:比如用pandas导出时设置了float_format做精度截断,或者读取时把字符串类型的数值强制转成浮点数后又误做了取整。
  • 代码里藏着隐性取整逻辑:比如对部分数值调用了round()、int(),或者用了x // 100000000 * 100000000这种亿级取整的操作,刚好和你示例里的舍入规则匹配。
  • 原始CSV的源数据有问题:如果CSV是从其他系统导出的,部分数值可能已经被格式化(比如科学计数法1.26E+11,或者带千分位的字符串),Python读取时直接解析成了舍入后的值。

怎么解决?

  • 先查代码里的取整操作:翻一遍处理这些数值的代码段,看看有没有针对特定列/行的取整逻辑,比如判断数值范围后做了亿级取整。
  • 强制按整数/字符串类型读取:用pandas的话,指定对应列的类型,避免自动解析出错:
    import pandas as pd
    # 直接按整数读取
    df = pd.read_csv('your_file.csv', dtype={'目标列名': 'int64'})
    # 或者先按字符串读取,后续再转换
    df = pd.read_csv('your_file.csv', dtype={'目标列名': 'str'})
    
  • 导出时别瞎设置格式:用pandas导出时,不要加会截断数值的参数,直接导出原始值:
    # 确保列是整数类型再导出
    df['目标列名'] = df['目标列名'].astype('int64')
    df.to_csv('output.csv', index=False)
    
  • 检查原始CSV的真实内容:用记事本或Notepad++打开CSV,看看数值是不是完整的原始值。如果是科学计数法格式,读取时用转换器处理:
    df = pd.read_csv('your_file.csv', converters={'目标列名': lambda x: int(float(x))})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:05:20