pandas读取Excel后float列带百分号如何移除并转换正确数值
解决方案
首先明确核心判断:你的TOT_SALES列数据类型是float64,属于纯数值列,值本身根本没有携带%字符,你看到的%是显示层渲染的效果,不是数据本身的内容,不要用字符串替换的方式处理,否则会直接触发类型错误。
从数值对应关系可以直接定位原因:
- 源文件真实值:11.80 → DataFrame显示值:1180.00%
- 本质是百分比格式的标准显示逻辑:将数值乘100后追加%后缀,和你观察到的现象完全吻合。
按以下步骤排查处理:
- 第一步:先验证真实值,执行单行代码确认数值本身是否正确:
print(df['TOT_SALES'].iloc[0]) - 第二步:根据输出结果对应处理:
- 如果输出是
11.8:说明数值本身完全正确,只是pandas的浮点显示格式被全局设置为百分比模式,重置显示配置即可:pd.set_option('display.float_format', None) # 重新打印前5行验证显示效果 print(df.head()) - 如果输出是
1180.0:说明Excel列的单元格百分比格式导致pandas读入时自动将数值放大了100倍,直接做数值缩放即可,不需要任何字符串操作:df['TOT_SALES'] = df['TOT_SALES'] / 100
- 如果输出是
避坑提示
不要对float类型的列直接使用.str.replace('%', '')类的字符串处理方法,数值类型没有.str访问器,执行会直接抛出异常。
内容的提问来源于stack exchange,提问作者Moh Sa
相关产品推荐
相关产品推荐

