从pandas中获取多维数组

时间:2017-01-09 14:38:11

标签: python pandas numpy

嗨,我开始使用pandas / numpy,我遇到了一些障碍。

我将图像矢量化并将数据存储在pandas列中。

misc.imresize(misc.imread(path, mode='RGB')

数据看起来很好,但我无法以我需要的数组格式得到它。

>>> data['img_vec'].shape 
(19641,)
>>> data['img_vec'][0].shape
(500, 500, 3)
>>> data['img_vec'][0].flatten().shape
(750000,)
>>> data['img_vec'].values.flatten()[0].shape
(500, 500, 3)

我真正想要的是让数据img_vec看起来像这样: (19641,750000)

这样做的好方法是什么?

提前致谢

编辑: 感谢您的反馈:

>>> data['img_vec'][0].reshape((1, 750000), order='C').shape
(1, 750000)

然而:

>>> data['img_vec'].values.reshape((1, 750000), order='C').shape
and
>>> np.reshape(data['img_vec'].values, (1, 750000), order='C').shape
Return "ValueError: total size of new array must be unchanged"

我假设这是因为它试图在数据系列上运行它而不是单个元素。如何在整个数据系列中运行它?

此外:

>>> type(data)
pandas.core.frame.DataFrame
>>> type(data['img_vec'])
pandas.core.series.Series
>>> type(data['img_vec'][0])
numpy.ndarray

2 个答案:

答案 0 :(得分:2)

你有一系列19,641个形状为(500, 500, 3)的numpy数组,你想要一个形状为(19641, 750000)的pandas数据帧。换句话说,您希望展平数组,并将它们的值放入列中。

诀窍是将扁平阵列转换成熊猫系列。这就是您告诉apply将数据放入列中,并返回包含750,000列的数据帧的方法。

data['img_vec'].apply(lambda arr: pd.Series(arr.flatten()))

如果你没有加入一个系列,apply将返回一系列19,641个长度为750,000的数组。

答案 1 :(得分:1)

Numpy's reshape method可能是您正在寻找的内容。

你可能需要调整"命令"获取正确结果的参数(如果没有样本数据重现,很难判断),但结果代码看起来应该是这些行。

reshaped_data = np.reshape(data.values, (-1, 750000), order='C')