当前位置: 首页 > article >正文

解决 Pandas DataFrame 索引错误:KeyError:0

在使用 Pandas 处理数据时,KeyError 是一个常见的问题,尤其是在尝试通过索引访问数据时。本文将通过一个实际案例(使用SKLearn中的MINIST数据集为例),详细分析 KeyError 的原因,并提供解决方法。

1 问题背景

在处理一些数据集的时候,我们可能会遇到了一个典型的 KeyError 问题。如sklearn中的开源数据集MNIST是一个包含手写数字的灰度图像数据集,每个图像的大小为 28×28 像素,数据集通常以 Pandas DataFrame 的形式加载。在尝试访问数据集中的样本时,代码抛出了以下错误:

KeyError: 0

错误信息表明,代码试图通过索引 0 访问数据,但 Pandas DataFrame 中没有名为 0 的列。这通常是因为 DataFrame 的索引方式与我们想的不一样。

2 错误分析

在 Pandas 中,DataFrame 的索引方式有两种常见的形式:

  1. 按列名索引:通过列名访问数据,例如 df['column_name']

  2. 按位置索引:通过位置访问数据,例如 df.iloc[row_index, column_index]

在 MNIST 数据集中,X 是一个 Pandas DataFrame,其索引方式默认为按列名索引。因此,当我们尝试使用 X[0] 访问数据时,Pandas 会尝试查找名为 0 的列,而不是第 0 行。由于 DataFrame 中没有名为 0 的列,因此会抛出 KeyError

3 方法 1:将 DataFrame 转换为 NumPy 数组(不建议)

如果后续操作不需要 Pandas DataFrame 的功能,可以直接将 X 转换为 NumPy 数组。这样就可以使用整数索引访问数据。但是慎用,因为后续你的代码中可能要用到DataFrame的相关东西,所以不建议在这里直接转为numpy。

# 将 DataFrame 转换为 NumPy 数组
X = X.to_numpy()

# 可视化第 0 个样本
plt.imshow(X[0].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()

4 方法 2:使用 .iloc 访问 DataFrame 的行(推荐)

为了保留 Pandas DataFrame 的功能,可以使用 .iloc 方法来访问行数据。

# 使用 .iloc 访问第 0 行
plt.imshow(X.iloc[0].values.reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()

5 代码示例

以MINIST为例,代码如下

# 导入必要的库
import numpy as np
import os
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml

# 设置随机种子以确保结果可复现
np.random.seed(42)

# 定义数据存储目录
data_dir = os.path.join(os.getcwd(), 'data')

# 下载 MNIST 数据集
mnist = fetch_openml("mnist_784", parser='auto', data_home=data_dir)

# 提取特征和标签
X, y = mnist.data, mnist.target

# 将 DataFrame 转换为 NumPy 数组(可选)
X = X.to_numpy()

# 可视化第 0 个样本
plt.imshow(X[0].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()

 


http://www.kler.cn/a/532396.html

相关文章:

  • Shell基础:中括号的使用
  • 2024美团秋招硬件开发笔试真题及答案解析
  • C++11中的bind
  • redis底层数据结构
  • 002 mapper代理开发方式-xml方式
  • PHP XML操作指南
  • gesp(C++六级)(11)洛谷:P11246:[GESP202409 六级] 小杨和整数拆分
  • Android ExpandableListView 详细用法全解析
  • 调用高德地图 api 开发地图组件
  • FPGA 时钟多路复用
  • SQL序列分析法:核心技巧与实战方法论 | 从用户行为分析到工业设备监控的通用解决方案
  • ES6Module
  • 蓝桥杯试题:排序
  • MyBatisPlus(SpringBoot版)功能说明
  • DeepSeek辅助学术写作进行大纲设计效果如何
  • PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接
  • 【模型】Bi-LSTM模型详解
  • MSP430 单独使用CCR1不触发的问题解决
  • 【Linux系统】信号:再谈OS与内核区、信号捕捉、重入函数与 volatile
  • 大模型安全漏洞报告——真实漏洞视角下的全面探讨
  • 【Vue3 完整学习笔记 - 第一部分】
  • Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)
  • 算法基础--二分查找
  • C++实现一款功能丰富的通讯录管理系统
  • sentinel的限流原理
  • Nacos 的介绍和使用