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

使用K-Prototypes做客户分群遇AssertionError错误求助

解决K-Prototypes "Categorical index larger than number of columns" 错误

给你几个实际使用K-Prototypes时最容易踩的坑和对应的解决办法:

  • 检查分类列索引的计数规则
    K-Prototypes的catColumnsPos要求用0起始的索引,很多人习惯按1-based(比如Excel列号)来写,导致索引超出列数。你可以先跑两行代码快速验证:

    # 打印数据总列数
    print("总列数:", df.shape[1])
    # 打印分类索引的最大值
    print("分类索引最大值:", max(catColumnsPos))
    

    如果max(catColumnsPos) >= df.shape[1],直接把所有分类索引减1(如果之前是按1-based写的),或者对照列的实际位置逐个修正。

  • 自动生成分类列索引,避免手动输入错误
    手动写索引很容易因为列顺序调整、增删列失效,建议直接通过列名自动获取索引:

    # 列出所有分类列的名称
    categorical_columns = ["Daypart", "col2", "col3", ...]  # 替换成你的分类列名
    # 自动获取每个分类列在数据框中的位置索引
    catColumnsPos = [df.columns.get_loc(col) for col in categorical_columns]
    

    这样不管列怎么变化,索引都是准确匹配的。

  • 排查预处理过程中是否误操作了列
    如果之前做过df.drop()、df.select_dtypes()这类操作,原来的列顺序或数量已经改变,手动写的catColumnsPos自然就不匹配了。这时候必须重新生成索引,或者回溯预处理步骤,确保分类列都保留且位置正确。

  • 确认分类列的类型合规
    K-Prototypes不需要哑编码,但分类列得是object或category类型,要是被误转成数值型(比如不小心做了错误的标签编码),也可能触发索引相关错误。可以用df.dtypes检查分类列类型,必要时转回正确类型:

    df[categorical_columns] = df[categorical_columns].astype('category')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:14:58