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

为什么需要转换CSV文件内的字符串?SOM聚类代码str运算报错咨询

报错原因

你收到的TypeError: unsupported operand type(s) for -: 'str' and 'str'报错,核心原因是自组织映射(SOM)训练、KMeans聚类的底层逻辑均为数值运算,要求输入的特征数据必须是整数或浮点数类型,但你传入的特征数据中存在字符串类型的列,算法执行减法等运算时无法处理字符串类型,因此抛出错误。

为什么要对CSV中的字符串做类型转换

pandas读取CSV文件时会自动推断每列的数据类型,若某列存在非数值内容,会被判定为object(即字符串)类型。而机器学习算法的所有计算逻辑都基于数值,字符串无法直接参与加减乘除、距离计算等操作,因此要么删除无特征意义的字符串列,要么将可转换的字符串列转为数值类型,才能保证算法正常运行。

需要执行类型转换/调整的代码行

问题出在构造特征集X的代码行:你当前仅删除了BALANCE和PURCHASES两列,没有处理数据集中的CUST_ID列(该列为用户编号,是字符串格式,无聚类特征意义),直接将其传入了SOM网络导致报错。
你可以直接将该列加入删除列表即可解决问题,修改后的代码如下:

veri = pd.read_csv(r"C:\Users\batuc\Desktop\CC GENERAL.csv")
# 在drop参数中新增CUST_ID列,删除无意义的字符串列
X = veri.drop(["CUST_ID", "BALANCE","PURCHASES"], axis=1)

如果后续你有需要保留的字符串格式数值列,可以用pd.to_numeric方法执行类型转换,示例:

# errors='coerce'会将无法转换为数值的内容自动设为空值,后续可自行处理空值
veri['目标列名'] = pd.to_numeric(veri['目标列名'], errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:48:00