为什么需要转换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
相关产品推荐
相关产品推荐

