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

Python执行X[0]时出现Key Error 0错误,请求技术帮助

问题解决:Key Error 0 报错原因及修复方案

错误原因

你遇到的KeyError: 0是因为X是pandas DataFrame对象,pandas里方括号[]默认是用来选取列的,你写X[0]会被当作查找「列名为0的列」,但MNIST数据集的列是784个像素特征,不存在符合的列,因此触发报错。而你实际需要的是选取第0行的样本数据。

两种修复方法

方法1:将DataFrame转为NumPy数组

把X转换成NumPy数组后,就可以用常规索引方式直接取第0个样本:

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version = 1)

# 将DataFrame转为NumPy数组
X, y = mnist["data"].to_numpy(), mnist["target"]

some_digit = X[0]
some_digit_image = some_digit.reshape(28,28)
plt.imshow(some_digit_image, cmap="binary")
plt.axis("off")
plt.show()

方法2:用pandas的iloc方法按位置取行

如果想保留DataFrame格式,使用iloc方法按位置选取行:

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version = 1)

X, y = mnist["data"], mnist["target"]

# 用iloc选取第0行数据
some_digit = X.iloc[0]
# 将行数据转为数组后再重塑形状
some_digit_image = some_digit.values.reshape(28,28)
plt.imshow(some_digit_image, cmap="binary")
plt.axis("off")
plt.show()

补充说明

另外纠正一个小细节:MNIST数据集包含的是70000张28×28像素的图像,不是7000张~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:32:28