python - 从 pandas 中获取多维数组

标签 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

最佳答案

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

诀窍是将展平的数组转换为 pandas 系列。这就是您如何告诉 apply 将数据放入列中,并返回包含 750,000 列的数据帧。

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

如果不转换为系列,apply 将返回一系列 19,641 个数组,长度为 750,000。

关于python - 从 pandas 中获取多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550366/

相关文章:

php - Python 相当于 PHP 的 strip_tags?

python - 如何查找 pandas 数据框中出现次数最多的行项目

python - 为什么 pandas 对日期时间索引的乘法处理方式不同?

python - 用 pandas 中的其他列子字符串替换子字符串

python - 优化傅立叶变换信号长度

python - 使用 `np.vectorize` 进行矢量化

python - Anacondas 安装搞砸了 IPython pandas 导入?

python - "raise"的范围在 Python 2 和 3 的嵌套异常处理程序中没有参数

python - 创建一个包含变量名称的列表

不以任何指定字母开头和结尾的python正则表达式搜索