初始化一个非常大的熊猫数据框

Posted

技术标签:

【中文标题】初始化一个非常大的熊猫数据框【英文标题】:Initializing a very large pandas dataframe 【发布时间】:2016-12-22 22:03:26 【问题描述】:

背景:我有一系列图像。在每张图像中,我将一个像素映射到一个数字。然后我想创建一个熊猫数据框,其中每个像素都在自己的列中,图像是行。我想这样做的原因是我可以使用前向填充之类的东西。

挑战:我已将每张图像转换为一维数字数组,每个数组约有 200 万个条目,我有数千张图像。简单地做 pd.DataFrame(array) 非常慢(在较少数量的图像上测试它)。有没有更快的解决方案?也欢迎其他如何有效地做到这一点的想法,但使用非核心的不同库可能是一个挑战(企业环境)。

【问题讨论】:

有多慢very slow 我机器上的三个图像大约需要 1.5 分钟(所以我在三个 numpy 数组的数组上执行 pd.DataFrame,每个数组都有大约 200 万个数字)。 更新:我发现执行 pd.DataFrame(np.asmatrix(list)) 比简单执行 pd.DataFrame(list) 快很多。这里的 list 是一个 numpy 数组的列表。它从 1.5 分钟到基本上是即时的。 那对你有好处! :) 【参考方案1】:

出于好奇,您是否有理由为此使用 Pandas?图像分析通常在矩阵中处理​​,这使得 NumPy 成为最受欢迎的。如果我没记错的话,sk-learn 和 PIL/IMAGE 都使用 NumPy 数组进行分析和操作。

另一种选择:避免内存中的步骤!您需要同时访问所有 1K+ 图像吗?如果没有,并且您正在单独操作每个文件,您可以遍历文件并在那里执行您的操作。更高效的步骤是将文件分解为 200 张左右的图像列表,然后使用 Python 的 MultiProcessing 功能进行并行分析。

JIC,你有安装 PIL 或 IMAGE,还是 sk-learn?这些软件包中已经包含了一些不错的图像分析算法,可以为您节省一些时间,而不必重新发明***。

【讨论】:

所以我在 Pandas 中这样做的原因是因为一些颜色代表“丢失的数据”,我转发填充到一个限制(Pandas 有很好的功能)。这是可以在 NumPy 矩阵中完成的事情吗? (我已经安装了 PIL) 看看numpy的掩码数组替换缺失数据的值 在指出一种或另一种方式之前的 2 个快速问题:1) 这些是实际图像还是类似于热图的图像,其中每个像素代表一些分析结果(聚类、相似性、可能性等)? 2) 缺失数据颜色是固定/有限集的一部分吗?

以上是关于初始化一个非常大的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中迭代列表和添加熊猫数据框列非常慢

熊猫将数据框列单元格初始化为空列表

如何扁平化数据框(熊猫)的特定列?

熊猫将空的对象列添加到数据框[重复]

如何释放熊猫数据框使用的内存?

如果要计数的值在另一个(以更快的方式)中,如何计算一个熊猫数据框中值的出现?