pandas转换sales列为int时报invalid literal for int() with base 10错误如何解决
pandas字符串格式销售额列转整数类型解决方案
错误原因说明
首次报错是因为sales列存在千位分隔符,,无法被直接识别为数字格式;替换逗号后二次报错的原因是:替换后得到的是类似"3906.00"的浮点格式字符串,astype(int)无法直接解析带小数点的字符串内容。
可行解决方案
- 方案1:先转浮点类型再转整数(实现最简便,适合数据干净无超长整数的场景)
df["sales"] = df["sales"].str.replace(",", "").astype(float).astype(int)
- 方案2:直接处理字符串截去小数部分后转整数(避免浮点转换的潜在精度损失问题)
df["sales"] = df["sales"].str.replace(",", "").str.split(".").str[0].astype(int)
- 方案3:使用
pd.to_numeric方法转换(兼容性更好,支持自定义脏数据处理规则)
# 常规写法,自动适配数字格式 df["sales"] = pd.to_numeric(df["sales"].str.replace(",", "")).astype(int) # 存在脏数据时可加errors参数,非法值自动转为NaN,配合pandas可空整数类型使用 df["sales"] = pd.to_numeric(df["sales"].str.replace(",", ""), errors="coerce").astype("Int64")
内容的提问来源于stack exchange,提问作者Lucia
相关产品推荐
相关产品推荐

