2017-03-09 246 views
1

我有一个熊猫数据框,包含以下领域展开像场:在大熊猫数据帧

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,但他们并不适用于这种情况。

+0

精灵3d numpy数组? – James

+0

是的。它们是(64 x 64 x 3),并且在所有记录中具有相同的维度。 – hemagso

回答

0

您可以将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]]) 
0

尝试

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

未经验证的代码,因为我在手机上