如何使用replace将DataFrame的string类型列转换为float类型
错误原因与修复方案
报错核心原因
- 语法错误:你将
for y in to_replace生成器表达式写在了apply()的参数位,解释器尝试调用该生成器对象导致类型错误 - 逻辑错误:你错误地在外层套了
df[ ]索引,apply()返回的是数值序列而非布尔掩码,不能用作DataFrame的索引条件 - 替换逻辑错误:多字符替换的循环逻辑位置错误,应该在lambda内部对单个字符串依次替换
$和,
修复后的lambda实现
直接修正你原来的写法即可正常运行:
df['Value_Float'] = df['Value_String'].apply( lambda x: 0 if x == 'None' else float(x.replace('$', '').replace(',', '')) )
更推荐的矢量化实现
用pandas内置方法处理,性能远高于逐行apply,适合所有规模的数据集:
import pandas as pd # 批量替换特殊字符和None字符串,再转数值类型 df['Value_Float'] = pd.to_numeric( df['Value_String'].replace({'None': '0', '\$': '', ',': ''}, regex=True) )
补充说明
如果你的列中None是Python原生空值而非字符串"None",将lambda判断条件改为pd.isna(x)即可,矢量化实现无需修改。
内容的提问来源于stack exchange,提问作者andre.fonta90
相关产品推荐
相关产品推荐

