Python pandas替换字符串逗号为点转数值报ValueError问题
问题原因
你的代码有两个核心问题导致报错:
- 数据处理操作未接收返回值:pandas中
dropna()、replace()等大部分方法默认不会原地修改原数据,而是返回处理后的新对象。你代码中直接调用方法没有赋值,执行到pd.to_numeric()步骤时,Streams列还是原始带逗号的字符串,没有做任何替换处理。 replace()方法使用错误:直接调用dados['Streams'].replace(",", ".")时,pandas默认执行全值精确匹配,仅会把单元格内容完全等于","的值替换为".", 不会替换字符串内部嵌入的逗号,完全没达到替换子串的预期效果。
额外注意:按照你给出的转换示例,把所有逗号替换为点后会得到48.633.449这类包含多个小数点的字符串,依然不符合浮点数格式要求,pd.to_numeric()还是会解析失败。你示例里的逗号是千分位分隔符,要转成float64类型的数值,直接移除逗号即可得到纯数字字符串,不需要替换为点。
修正代码
import pandas as pd import numpy as np dados = pd.read_csv("spotify_dataset.csv") # 删除空值并赋值回原变量 dados = dados.dropna() # 替换Streams列中所有千分位逗号为空字符串,得到纯数字串 dados['Streams'] = dados['Streams'].str.replace(",", "", regex=False) # 转换为float64类型,异常值转为NaN避免报错 dados['Streams'] = pd.to_numeric(dados['Streams'], errors='coerce').astype('float64') dados.head()
如果你确实需要先把逗号替换为点做其他处理,把str.replace的第二个参数改为"."即可,但后续要转数值的话还需要额外处理多小数点的问题。
内容的提问来源于stack exchange,提问作者Alexandre Vieira
相关产品推荐
相关产品推荐

