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

如何将DataFrame行中784个像素值转换为28×28矩阵?

解决方案

方法一:使用pandas apply 逐行处理

这种方法直观易懂,适合快速实现:

import pandas as pd
import numpy as np

# 读取CSV文件
df = pd.read_csv('your_dataset.csv')

# 提取数字标签列(假设第一列列名为'digit',如果无列名可改用df.iloc[:, 0])
labels = df['digit']

# 提取所有像素列(从第二列到最后一列)
pixel_columns = df.iloc[:, 1:]

# 将每行的784个像素值重塑为28×28矩阵
pixel_matrices = pixel_columns.apply(lambda row: row.values.reshape(28, 28), axis=1)

# 构建最终DataFrame
final_df = pd.DataFrame({
    'digit': labels,
    'pixel_matrix': pixel_matrices
})

方法二:使用numpy批量处理(更高效)

对于60000行的大数据集,numpy的向量操作比逐行apply速度快很多:

import pandas as pd
import numpy as np

df = pd.read_csv('your_dataset.csv')

# 提取标签和像素数据
labels = df.iloc[:, 0].values
pixel_data = df.iloc[:, 1:].values

# 批量将像素数据重塑为(60000, 28, 28)的三维数组
pixel_matrices = pixel_data.reshape(-1, 28, 28)

# 转换为DataFrame
final_df = pd.DataFrame({
    'digit': labels,
    'pixel_matrix': list(pixel_matrices)  # 将numpy数组转为列表存入DataFrame
})

验证结果

可以通过以下代码检查重塑是否正确:

# 查看第一行的矩阵形状
print(final_df.iloc[0]['pixel_matrix'].shape)  # 输出应为(28, 28)

常见问题排查

  • 如果之前重塑失败,大概率是未正确指定轴方向(比如apply时用了axis=0而非axis=1),或者误将列数据当成行数据处理。
  • 确保像素列的总数是784,避免因列数不对导致reshape报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:28:06