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
相关产品推荐
相关产品推荐

