Python 从熊猫中获取多维数组

Python 从熊猫中获取多维数组,python,pandas,numpy,Python,Pandas,Numpy,嗨,我刚开始接触熊猫/小矮人,我遇到了一些障碍 我将图像矢量化,并将数据存储在一列中 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

嗨,我刚开始接触熊猫/小矮人,我遇到了一些障碍

我将图像矢量化,并将数据存储在一列中

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看起来像这样: (19641750000)

做这件事的好方法是什么

提前谢谢

编辑: 感谢您的反馈:

>>> 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"
我假设这是因为它试图在数据系列而不是单个元素上运行它。如何在整个数据系列上运行它

此外:

可能就是你要找的

您可能需要tweek“order”参数以获得正确的结果(如果没有要复制的样本数据,很难判断),但是生成的代码应该类似于这些代码

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

您有一系列19641 numpy数组的形状
(500500,3)
,并且您想要一个熊猫数据帧的形状
(19641750000)
。换句话说,您希望展平数组,并将其值放入列中

诀窍是将展平的阵列投射到一个系列中。这就是如何告诉
apply
将数据放入列中,并返回一个包含750000列的数据帧

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

如果您不转换为一个系列,
apply
将返回长度为750000的19641个数组。

什么是
类型(数据)
?感谢您的回复,我在帖子中添加了此信息。您应该使用整形(-175000)而不是整形((175000)这看起来确实很有希望。我用更多的数据更新了这篇文章,你能看一下吗?Thanks@user2630270您在应用此解决方案时输入了错误,输入形状应为
(-175000)
,而不是
(175000)
-1
告诉numpy自己计算这个维度。我仍然得到(19641,)的形状,但每个元素的形状都是(750000,)即使这返回相同的形状:.apply(lambda x:np.ndarray.flatte(x)[0])。shapeI认为我的数据有点乱。type(data['img_vec'][0][0])是ndarray类型(data['img_vec'[0][0][0][0])uint8是这样吗?关于
data['img_vec'].apply(lambda arr:pd.Series(arr.flatte())
?转换到熊猫系列中应该使
apply
返回一个您想要的大小的数据帧。请查看我编辑的答案,如果仍然不清楚,请告诉我。
data['img_vec'].apply(lambda arr: pd.Series(arr.flatten()))