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

KMeans聚类代码报错:无法将字符串转为浮点数,求排查解决

KMeans聚类报错:could not convert string to float 解决方法

问题重现

你在使用Pandas结合KMeans开展聚类项目时,运行以下代码到第7行时触发报错:

import pandas as pd
from sklearn.cluster import KMeans

dataset = pd.read_csv("smogon.csv")
dataset.drop(["url", 'texto'], axis=1, inplace=True)
km = KMeans(n_clusters=1, n_init='auto')
cluster = km.fit_predict(dataset[["moves"]])  # 报错行
dataset["Grupo"] = cluster
print(dataset)

报错信息:

cluster = km.fit_predict(dataset[["moves"]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
could not convert string to float

且该问题仅在使用smogon.csv时出现,其他CSV文件可正常运行。

报错原因

KMeans是基于数值计算的聚类算法,仅能处理数值型特征。smogon.csv中的moves列是字符串类型(比如招式名称、字符串化的招式列表等),无法直接被模型解析;而你之前使用的其他CSV中,moves列应为数值格式,因此能正常运行。

解决方法

根据moves列的实际数据格式,选择以下适配方案:

  • 离散类别字符串:编码转换
    如果moves是离散的类别型字符串(如不同招式名称),可通过编码将其转为数值:

    # 标签编码(适合有序类别,需注意模型会默认类别有顺序)
    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    dataset["moves_encoded"] = le.fit_transform(dataset["moves"])
    cluster = km.fit_predict(dataset[["moves_encoded"]])
    
    # 独热编码(适合无序类别,避免模型误判类别顺序)
    dataset_encoded = pd.get_dummies(dataset, columns=["moves"])
    cluster = km.fit_predict(dataset_encoded)
    
  • 含数值的字符串:提取数值
    如果moves是包含数值的结构化字符串(如"招式A,150,20"这类格式),可直接提取其中的数值部分:

    # 示例:假设字符串用逗号分隔,提取第二个数值字段
    dataset["moves_num"] = dataset["moves"].apply(lambda x: float(x.split(",")[1]))
    cluster = km.fit_predict(dataset[["moves_num"]])
    
  • 文本类字符串:向量化转换
    如果moves是自由文本或多招式组合文本,可通过文本向量化工具转为数值向量:

    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf = TfidfVectorizer()
    # 将文本转为TF-IDF向量
    moves_vector = tfidf.fit_transform(dataset["moves"])
    cluster = km.fit_predict(moves_vector.toarray())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:02