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
相关产品推荐
相关产品推荐

