pandas将exp_col列指数值转整数出现负数,如何获取正确原始值
问题根因
- 整数溢出:
astype(int)默认会匹配系统默认整数类型,32位有符号整数上限仅为2^31-1 = 2147483647,当你要转换的指数格式数值超过这个阈值时,就会触发溢出翻转,得到负数结果。 - 字符串解析异常:如果
exp_col是字符串类型存储的指数表达式(如"3.4e+9"),直接调用astype(int)会无法正确解析数值,也可能出现异常结果。
可行解决方案
场景1:exp_col为浮点型存储的指数数值
优先用64位整数类型避免溢出,如果数值极大可以用Python原生无上限整数:
# 方案1:转64位整数,适配绝大多数超过32位上限的场景 df['Converting_to_int'] = df['exp_col'].fillna(0).astype('int64') # 方案2:数值超过int64上限时用,转Python原生整数 df['Converting_to_int'] = df['exp_col'].fillna(0).apply(lambda x: int(x))
场景2:exp_col为字符串格式存储的指数数值
先转浮点型再转整数即可正确解析:
df['Converting_to_int'] = df['exp_col'].fillna('0').astype(float).astype('int64')
快速验证方式
你可以先执行以下代码确认字段属性,匹配对应解决方案:
# 查看字段类型 print(df['exp_col'].dtype) # 查看字段最大值,判断是否超出32位整数上限 print(df['exp_col'].max())
内容的提问来源于stack exchange,提问作者san1
相关产品推荐
相关产品推荐

