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

Python代码报KeyError: 'iris'错误求修复,已确认文件路径正确

修复KeyError: 'iris'问题

问题概述

运行Lab 5.py代码时触发KeyError: 'iris',已确认iris.csv与代码文件在同一目录,需修复该错误并确保代码正常运行。

错误追踪信息

Traceback (most recent call last):
  File "C:\Users\kyle_\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas\core\indexes\base.py", line 3800, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 165, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 5745, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 5753, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'iris'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\kyle_\OneDrive\Documents\COIS 4400H\Lab 5.py", line 23, in <module>
    iris_df['iris'].drop_duplicates()
  File "C:\Users\kyle_\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas\core\frame.py", line 3805, in __getitem__
    indexer = self.columns.get_loc(key)
  File "C:\Users\kyle_\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc
    raise KeyError(key) from err
KeyError: 'iris'
>>> 

用户代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

import datetime as dt

import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

from scipy.cluster.hierarchy import linkage
from scipy.cluster.hierarchy import dendrogram
from scipy.cluster.hierarchy import cut_tree

import os
os.chdir('C:\\Users\kyle_\\OneDrive\\Documents\\COIS 4400H')
iris_df = pd.read_csv('iris.csv')

iris_df.head()

iris_df['iris'].drop_duplicates()

iris_df = iris_df.drop('iris',axis=1)

scaler = StandardScaler()

iris_df_scaled = scaler.fit_transform(iris_df)
iris_df_scaled.shape

sse = []
range_n_clusters = [2, 3, 4, 5, 6, 7, 8 , 9 , 10 ]
for num_clusters in range_n_clusters:
    kmeans = KMeans(n_clusters=num_clusters, max_iter=50)
kmeans.fit(iris_df_scaled)

sse.append(kmeans.inertia_)

plt.plot(sse)

# 1. Kmeans with k=3
kmeans = KMeans(n_clusters=3, max_iter=50)
y = kmeans.fit_predict(iris_df_scaled)

y

iris_df['Label'] = kmeans.labels_
iris_df.head()

plt.scatter(iris_df_scaled[y == 0, 0], iris_df_scaled[y == 0, 1], s = 100, c = 'purple', label = 'Iris-setosa')
plt.scatter(iris_df_scaled[y == 1, 0], iris_df_scaled[y == 1, 1], s = 100, c = 'orange', label = 'Iris-versicolour')
plt.scatter(iris_df_scaled[y == 2, 0], iris_df_scaled[y == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')

# 2. Hierarchical clustering
plt.figure(figsize=(15, 5))
mergings = linkage(iris_df_scaled,method='complete',metric='euclidean')
dendrogram(mergings)
plt.show()

cluster_hier = cut_tree(mergings,n_clusters=3).reshape(-1)

iris_df['Label'] = cluster_hier
iris_df.head()

plt.scatter(iris_df_scaled[cluster_hier == 0, 0], iris_df_scaled[cluster_hier == 0, 1], s = 100, c = 'purple', label = 'Iris-setosa')
plt.scatter(iris_df_scaled[cluster_hier == 1, 0], iris_df_scaled[cluster_hier == 1, 1], s = 100, c = 'orange', label = 'Iris-versicolour')
plt.scatter(iris_df_scaled[cluster_hier == 2, 0], iris_df_scaled[cluster_hier == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')

修复方案

1. 定位真实列名

错误核心是代码尝试访问名为'iris'的列,但数据集里不存在这个列。经典鸢尾花数据集的标签列通常叫'species'或'class',在读取数据后添加代码查看真实列名:

iris_df = pd.read_csv('iris.csv')
print(iris_df.columns)  # 打印所有列名

2. 替换错误列名引用

将代码中所有'iris'替换为真实的标签列名。比如如果真实列名是'species',修改如下:

# 原代码
iris_df['iris'].drop_duplicates()
iris_df = iris_df.drop('iris',axis=1)
# 修改后
iris_df['species'].drop_duplicates()
iris_df = iris_df.drop('species',axis=1)

3. 修正KMeans循环缩进错误

原代码中kmeans.fit()和sse.append()不在for循环块内,导致仅计算最后一个聚类数的SSE,修正缩进并完善绘图:

sse = []
range_n_clusters = [2, 3, 4, 5, 6, 7, 8 , 9 , 10 ]
for num_clusters in range_n_clusters:
    kmeans = KMeans(n_clusters=num_clusters, max_iter=50)
    kmeans.fit(iris_df_scaled)  # 缩进至循环内
    sse.append(kmeans.inertia_)  # 缩进至循环内

plt.plot(range_n_clusters, sse)  # 添加x轴参数,让图表更清晰
plt.xlabel('聚类数')
plt.ylabel('SSE')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:50:33