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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:27:26