在大熊猫数据帧
问题描述:
我有一个熊猫数据框,包含以下领域展开像场:在大熊猫数据帧
ID TYPE_01 TYPE_02 SPRITE
1 12 8 [Image]
2 11 9 [Image]
3 9 nan [Image]
4 3 12 [Image]
5 8 nan [Image]
TYPE_01和TYPE_02是在图像分类,我会尝试使用机器学习方法进行分类(我我正在使用sklearn)。 SPRITE包含一个64x64 HSV图像,我将用于训练方法。
我想在PCA分解中使用一个尺寸(#记录,64 * 64 * 3)的大2D矩阵中的图像,但我遇到了一些问题。我设法使用for循环遍历每个记录,但我认为这可能有点低效(我分配了一个新数组,并通过记录扁平图像来分配记录)。
有没有更好的方法来做到这一点使用熊猫/ Numpy?如果使用df.values.shape
得到数据帧的形状,我会得到一个(#Records,4)
,所以对整个数据帧进行简单的平坦化,拆散或重塑对我没有帮助。
我看了一些类似的问题行this one,但他们并不适用于这种情况。
答
您可以将numpy的整形应用于整个Sprites列以平滑它们。 (我创建的随机数据来回我的精灵)
df.SPRITE.apply(lambda x: np.reshape(x, -1))
Out[1]:
0 [202, 82, 70, 34, 134, 54, 231, 244, 107, 179,...
1 [66, 14, 120, 18, 26, 57, 59, 2, 58, 109, 223,...
2 [47, 227, 1, 102, 51, 110, 83, 220, 101, 161, ...
Name: SPRITE, dtype: object
如果你想这一切作为一个单一的numpy的阵列,可以将上面的输出传递到vstack
np.vstack(df.SPRITE.apply(lambda x: np.reshape(x, -1)))
Out[2]:
array([[202, 82, 70, ..., 145, 226, 97],
[ 66, 14, 120, ..., 42, 64, 48],
[ 47, 227, 1, ..., 87, 102, 156]])
答
尝试
np.vstack([i.reshape(1, -1) for i in df.SPRITE.values.tolist()])
未经验证的代码,因为我在手机上
精灵3d numpy数组? – James
是的。它们是(64 x 64 x 3),并且在所有记录中具有相同的维度。 – hemagso