将数据框的行折叠成矩阵



我有一个生成60000 x 785数据帧的csv。每行有一个数字作为第一列,其余的784列是该数字的像素值。我需要将784像素折叠成28 x 28的矩阵。生成的数据帧将在第一列中包含数字,第二列将是像素值的28x28矩阵。

digit p1 p2 p3 p4 ... p785

我已经尝试重塑数据,但失败了,所以我应该做些什么来重塑它?

先将'digit'设置为索引,然后再尝试:

df.apply(lambda x: x.values.reshape(28, -1), axis=1)

您可以尝试将数据存储为字典,其中键是第一列的数字,值是大小为28x28的数组,其中包含每行的像素值。

  • 导入包:
import csv
import numpy as np
import pandas as pd
  • 创建test.csv文件:
with open('./test.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
for i in range(60000):
row_i = (i+1)*np.ones(785, dtype=int)
writer.writerow(row_i)
f.close
  • 将csv加载为数据帧:
data = pd.read_csv('./test.csv', header=None, index_col=0)
data = data.T.to_dict('list')
for i, value in data.items():
data[i] = np.asarray(value).reshape(28,28)
  • 检查输出
print(len(data))
print(data)

有一个形状为6000行785列的数据框架:

df = pd.DataFrame(…)
df.shape
# (6000, 785)

提取数字列供以后使用:

digits = df['digit']

将其他列的值重塑为(6000,28,28):

arr = df.iloc[1:].values.reshape(6000, 28, 28)
# -> np.array

将组件重新组合:

df = pd.DataFrame({'digit': digits,
# dataframe like only 1-d things
'matrix': list(arr)
})

…顺便说一下,你的问题与如何重塑数据框的每一行密切相关?

最新更新