扩展pandas数据框中的图像字段

时间:2017-03-09 00:15:47

标签: python image pandas numpy

我有一个包含以下字段的Pandas Dataframe:

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图像,我将提供给培训方法。

我试图在一个大尺寸的二维矩阵(#Records,64 * 64 * 3)中展平图像,以便在PCA分解中使用,但我遇到了一些问题。我设法在每条记录上使用for循环,但我认为这可能有点低效(我分配了一个新数组,并通过记录分配了平坦图像的记录)。

使用Pandas / Numpy有更好的方法吗?如果使用df.values.shape得到数据框的形状,我会得到一个(#Records,4),因此对整个数据框进行简单的展平,拉平或重塑并没有帮助我。

我看了一些类似的问题this one行,但它们并不适用于这种情况。

2 个答案:

答案 0 :(得分:0)

您可以将numpy的整形应用于整个Sprite列以展平它们。 (我为我的精灵创建了随机数据)

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]])

答案 1 :(得分:0)

尝试

np.vstack([i.reshape(1, -1) for i in df.SPRITE.values.tolist()])

我在电话中未经验证的代码