首页 > 解决方案 > 如何在没有内存错误的情况下迭代熊猫数据帧

问题描述

我有一个包含 140K 行的 csv 文件。使用熊猫库。现在的问题是我必须将每一行与其他每一行进行比较。现在的问题是它花费了太多时间。同时,我正在创建另一列,根据比较为每一行附加许多数据。在这里我收到内存错误。

至少内存错误的最佳解决方案是什么?我正在使用 12GB RAM,Google Colaboratory。数据框示例:

ID    x_coordinate   y_coordinate
1     2              3
2     3              4
............
X     1              5

现在,我需要找到每行与其他行的距离,如果距离在某个阈值内,我将为在一定距离内的那两行分配一个新的 id。因此,如果在我的情况下,ID 1 和 ID 2 在我为两者分配的一定距离a内。并且 ID 2 和 ID X 在一定距离内,我将其分配b为新的匹配 ID,如下所示

ID    x_coordinate   y_coordinate   Matched ID
1     2              3              [a]
2     3              4              [a, b]
............
X     1              5              [b]

对于距离,我使用的√{(xi − xj)2 + (yi − yj)2} 阈值可以是任何东西。说米单位。

标签: pythonpandasout-of-memorygoogle-colaboratory

解决方案


这读起来就像您试图将完整的平方距离矩阵保存在内存中,正如您所注意到的,这显然不能很好地扩展。

我建议您阅读 DBSCAN 聚类如何解决问题,与例如层次聚类相比:

他们似乎不是一次计算所有成对距离,而是

  • 将数据放入空间数据库(用于具有阈值的高效邻域查询),然后
  • 迭代这些点以动态识别邻居和相关距离。

不幸的是,我无法向您指出现成的代码或 pandas 功能来支持这一点。


推荐阅读