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

聚类代码中Pandas出现KeyError:1的原因排查与解决求助

搞定聚类展示的KeyError:1问题!

嘿,咱们直接戳中问题核心:你碰到的KeyError:1,本质是用聚类编号i直接当DataFrame的索引去取值,但你的df索引根本不是聚类编号啊!

为啥会错?

举个实际场景:假设你的聚类模型输出的标签是[0,0,1,1,2],意思是第0、1条文档属于聚类0,第2、3条属于聚类1,第4条属于聚类2。这时候你循环到i=1,想用df.loc[i]['title']取聚类1的文档,可df.loc[1]指的是原始索引为1的那条(它属于聚类0),聚类1的文档索引是2、3,自然找不到索引1,直接触发KeyError。

怎么修复?

核心思路是:先把每个文档对应的聚类标签和df绑定,再按标签筛选对应聚类的文档,而不是直接用聚类编号当索引。

步骤1:给df加聚类标签列

首先你得有聚类模型输出的标签数组(一般是模型的labels_属性,比如kmeans.labels_),把它加到df里:

# 假设你的聚类模型是kmeans,把每个文档的聚类标签存入df
df['cluster_tag'] = kmeans.labels_

步骤2:修改循环逻辑,按标签筛选

把原来报错的df.loc[i]['title']替换成按标签筛选的写法,完整的循环代码我帮你改好了,还顺便简化了重复的打印逻辑:

for i in range(num_clusters):
    # 输出聚类关键词
    print(f"Cluster {i} words: ", end="")
    # 提取当前聚类的Top10关键词
    top_words = []
    for ind in order_centroids[i, :10]:
        word = vocab_df.loc[terms[ind].split(' ')].values.tolist()[0][0]
        top_words.append(word)
    print(', '.join(top_words))

    # 输出聚类对应的文档标题(重点修复部分)
    print(f"Cluster {i} titles: ", end="")
    # 筛选出当前聚类的所有文档
    cluster_docs = df[df['cluster_tag'] == i]
    # 提取标题列表并拼接输出
    title_list = cluster_docs['title'].tolist()
    print(', '.join(title_list))

额外小提示

  • 你原来的关键词打印逻辑重复写了j==0和j!=0的情况,用join方法直接拼接列表会更简洁高效。
  • 要确保order_centroids的排序是正确的,且terms数组和vocab_df的索引完全对应,避免出现其他索引相关的小问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:53:14