将Pandas浮点列转为int时得到-2147483648(平台特定错误)
问题分析与解决方案
这个问题的核心是32位有符号整数溢出,我来给你拆解原因和解决办法:
为什么会得到-2147483648?
你要转换的数值31062000999100远大于32位有符号整数的最大值2147483647。在你的Windows环境下(结合老版本pandas 0.22.0),调用astype(int)时默认使用了32位整数类型,当数值超出范围时就会触发溢出,最终返回32位有符号整数的最小值-2147483648。而Linux环境下pandas默认使用64位整数,所以不会出现这个问题。
解决办法
1. 直接转换为64位整数
明确指定转换为int64类型,它能容纳远大于你当前数值的整数范围:
import pandas as pd a = pd.DataFrame(columns=['a']) a.loc[0] = 31062000999100.0000000 a = a.astype('int64') print(a) # 输出: # a # 0 31062000999100 print(a.dtypes) # 输出:int64
2. 从字符串格式处理
如果已经将数据转成了带小数点的字符串(比如31062000999100.0),可以先剔除小数点部分再转成int64:
a['a'] = a['a'].str.split('.').str[0].astype('int64')
3. 预防建议
尽量避免用float类型存储大整数——float64的精度上限是2^53,超过这个值的整数无法被精确表示,可能导致数值失真。如果你的原始数据是整数,建议直接以字符串或整数类型读取,再转换为int64。
内容的提问来源于stack exchange,提问作者B Furtado
相关产品推荐
相关产品推荐

