聚类代码中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
相关产品推荐
相关产品推荐

