You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas读取CSV时如何移除%并将字符串列转换为浮点型

读取CSV时自动转换带百分号的列为浮点型

问题描述

CSV文件中ChangeP列存储格式为带%后缀的字符串,例如"6.45%",同时存在"-1.23%"这类负值字符串。需要在读取文件的环节就完成整列的百分号移除、浮点类型转换,方便后续直接做数值比较、计算操作。

直接指定dtype读取的写法会抛出报错:

df = pd.read_csv('spxweekly.csv', dtype={'ChangeP':float})
print(df.dtypes)

报错信息:

ValueError: could not convert string to float: '6.45%'

目前仅能在读取完成后通过字符串替换+类型转换实现处理,无法在读取环节一步完成:

bigmove = df.loc[df['ChangeP'] > "5"]
print(bigmove.ChangeP.str.replace('%', '').astype(float))

实现方法

调用pd.read_csv时传入converters参数,为ChangeP列指定转换逻辑,读取环节就能一步完成处理,代码如下:

df = pd.read_csv(
    "spxweekly.csv",
    converters={"ChangeP": lambda val: float(val.strip("%"))}
)

逻辑说明

  • converters参数接收字典格式的配置,键为列名,值为作用在该列每一个值上的转换函数,会在解析CSV时直接执行,无需读取后二次处理
  • val.strip("%")只会移除字符串首尾的%符号,不会破坏负号、小数点的位置,负值字符串可以正常转换为对应负浮点数
  • 转换完成后ChangeP列直接为float类型,后续数值筛选、计算可以直接调用,比如筛选涨跌幅大于5的行直接写df[df["ChangeP"] > 5]即可
  • 如果业务上需要把百分比转为0-1区间的比例值,只需要把转换逻辑调整为lambda val: float(val.strip("%")) / 100,6.45%就会被转换为0.0645。

内容的提问来源于stack exchange,提问作者jordyj99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:54:22