DataFrame货币字符串列转float失败?replace方法无效问题求解
问题分析与解决
错误原因
你当前使用的DataFrame.replace()方法默认是整元素匹配规则:只有当单元格的整个值完全等于'$'或','时,才会执行替换操作。而你的单元格内容是包含这些符号的完整字符串(比如$55.87),所以这两行代码根本不会触发替换,自然看不到任何变化。
正确解决方案
要替换字符串中的子符号,需要使用Pandas针对字符串列的str.replace()方法,或者给replace()加上regex=True参数启用正则匹配。以下是几种可行的写法:
方法1:链式调用str.replace分步处理
# 先移除$,再移除逗号,最后转换为float类型 sales_dataset_date['invoice_value2'] = ( sales_dataset_date['invoice_value'] .str.replace('$', '', regex=False) # regex=False避免$被当作正则元字符 .str.replace(',', '', regex=False) .astype(float) )
方法2:正则一次替换多个符号
用正则表达式匹配$或,,一次性完成替换:
sales_dataset_date['invoice_value2'] = ( sales_dataset_date['invoice_value'] .str.replace('[$,]', '', regex=True) .astype(float) )
方法3:给replace()加regex=True参数
如果你想继续用DataFrame.replace(),可以开启正则模式:
sales_dataset_date['invoice_value2'] = sales_dataset_date['invoice_value'].replace('[$,]', '', regex=True).astype(float)
执行以上任意一种方法后,invoice_value2列就会被转换为float类型,方便后续数据处理。
内容的提问来源于stack exchange,提问作者azinsera
相关产品推荐
相关产品推荐

