从紧凑的熊猫数据框创建图形的最佳方法是什么?

问题描述

我有每个商店的邮政编码数据集和附近的邮政编码数据集。如下所示:

邮政编码 近PC 旅行时间
L2L 3J9 [N1K 0A1'、'N1K 0A2'、'N1K 0A3'、'N1K 0A4'、'... [nan,nan,9,5,nan...]

我知道我可以分解数据,但这会导致多出约 4000 万行。我可以执行的另一个预处理步骤是删除每个列表中旅行时间不可用的值。但是,我需要将其从 NearPC 列表中删除

有没有办法合并 networkx 来创建这个图?我试过使用

G = nx.from_pandas_edgelist(df,'near_PC','PostalCode',['TravelTime']) 但我认为它不允许将列表作为源或目标。

TypeError: unhashable type: 'list'

有没有办法解决这个问题?如果不是,我如何以有效的方式基于条件删除每行列表的相同索引?

解决方法

您已经确定了您的问题,尽管您可能没有意识到。你有一个有 40M 边的图,但你适当地避免了表格爆炸。您必须以某种形式对爆炸进行编码,因为您的图形需要所有 40M 边。

为了节省多少麻烦,我建议您为边编写一个简单的生成器表达式:从 PostalCode 中取出一个节点,遍历另一个节点的 nearPC 列表。让 Python 和 NetworkX 担心内联扩展。

您可以根据生成的格式切换调用的 nx 构建方法。您确实在某种程度上减慢了处理速度,但爆炸细节隐藏在语言语法中。此外,如果该生成器和 nx 方法之间存在任何内置并行化,您将隐含地获得该优势。