python - 如何在没有内存错误的情况下迭代熊猫数据帧
问题描述
我有一个包含 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}
阈值可以是任何东西。说米单位。
解决方案
这读起来就像您试图将完整的平方距离矩阵保存在内存中,正如您所注意到的,这显然不能很好地扩展。
我建议您阅读 DBSCAN 聚类如何解决问题,与例如层次聚类相比:
他们似乎不是一次计算所有成对距离,而是
- 将数据放入空间数据库(用于具有阈值的高效邻域查询),然后
- 迭代这些点以动态识别邻居和相关距离。
不幸的是,我无法向您指出现成的代码或 pandas 功能来支持这一点。
推荐阅读
- python - 如何在 Scrapy 中将多级页面爬取到一个项目?
- javascript - 通过单击该卡获取卡的详细信息-vue js
- ruby-on-rails - 与 where 语句的 has_many 关系需要哪种类型的索引
- reactjs - 交替背景颜色反应数据表组件
- python - Tor IP旋转与硒
- powerbi - PBI 群集列视觉 - 值为零时隐藏
- snowflake-cloud-data-platform - Snowflake 中的数据建模最佳实践
- java - 为什么在 pom.xml 文件中找不到我的依赖项?
- javascript - 如何从 URL 检索外部 PDF 并将其传递给节点 js 中的另一个函数?
- flutter - 未调用 FutureBuilder