使用pd.to_numeric转换长数字字符串报Integer out of range错误如何解决
大整数字符串转数值类型溢出问题解决方案
报错原因
pandas默认调用pd.to_numeric()转换时会优先使用固定宽度的整数类型(最高为int64),该类型最大仅支持存储19位的整数(最大值为9223372036854775807),你的数据中最长有28位整数,远超过该上限因此触发溢出报错。
解决方案
可根据实际使用场景选择适配方案:
- 场景1:需要精确存储大整数,无极端性能要求
直接调用Python原生的int类型转换,Python原生整数无长度限制,不会触发溢出:
注意:该列会以df_test['Number_converted'] = df_test['Number_string'].apply(int)object类型存储,大数据量下的向量化运算效率会低于固定宽度数值列,万级及以下数据量无感知影响 - 场景2:不需要绝对精确,可接受轻微精度损失
指定转换为浮点数类型,可兼容大数字存储:
注意:float64类型仅能保证前16位整数的精度,28位数字的尾部会被四舍五入,仅适合不需要精确匹配尾部数字的统计场景df_test['Number_converted'] = pd.to_numeric(df_test['Number_string'], downcast='float') - 场景3:涉及金融、对账等零精度损失要求的场景
使用Python标准库的Decimal类型存储:
该类型可完整保留所有位数的精度,支持常规的数值运算。from decimal import Decimal df_test['Number_converted'] = df_test['Number_string'].apply(Decimal)
内容的提问来源于stack exchange,提问作者Bo Sanders
相关产品推荐
相关产品推荐

