Pandas使用astype(int)转换大数值时全部变为-2147483648的问题
大数值转整数溢出问题的解决办法
问题根源
这是典型的32位整数溢出:pandas里默认的int类型对应32位有符号整数,最大值只有2147483647(约21亿),而你的数值都是5000多亿,远超出这个范围,溢出后就会被强制转换成32位整数的最小值-2147483648。
另外你用的long int、big int是C语言或SQL里的类型名称,pandas不支持这种写法,得用它兼容的numpy类型标识。
可行解决办法
1. 转成64位整数(最推荐)
直接指定int64类型,它的最大值能到9223372036854775807(约9千亿亿),完全装得下你的数据:
import pandas as pd x = [56668772800.0, 55899926600.0, 55038007900.0, 58073681300.0, 58224458500.0] df = pd.DataFrame(x, columns=["pol_number"]) # 转换为int64类型 df.pol_number = df.pol_number.astype('int64') df
运行后就能得到正确的整数结果:
pol_number 0 56668772800 1 55899926600 2 55038007900 3 58073681300 4 58224458500
2. 用Nullable整数类型(适合有空值的场景)
如果你的数据里可能出现空值,建议用大写的Int64类型,它既支持大整数,又能处理空值:
df.pol_number = df.pol_number.astype('Int64')
3. 先转字符串再转整数(避免浮点数精度风险)
如果担心浮点数转整数时的精度问题(比如数值原本不是精确整数的情况),可以先转成字符串再转int64:
df.pol_number = df.pol_number.astype(str).astype('int64')
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

