从DataFrame生成具有节点和边属性的图形

时间:2019-07-06 14:40:01

标签: python python-3.x pandas networkx network-analysis

我确实有一个熊猫数据框,我想将其转换为网络,其结构如下:

[NodeID,TargetID,NodeAttr1,NodeAttr2]

但是要注意的是,我确实有一些行,其中TargetID可能为None,因为网络中有未连接的节点。 有没有简单的方法来创建网络结构并分配我的属性?

我尝试过:

G = nx.from_pandas_edgelist(df)

但是此方法仅给我提供了添加边缘属性的选项,而没有添加到节点的属性。还将从未连接到空隙的节点创建边缘。所以不是我想要的。

import pandas as pd
import networkx as nx

d = {'NodeID': [1, 2], 'TargetID': [2, None], 'NodeAttr1': ['aaaa', 'bbbbb'], 'NodeAttr2': [3, 4]}
df = pd.DataFrame(data=d)

node_df = df[df['Node_ID']]
edge_df = df[df.TargetID.notnull()]

G = nx.from_pandas_edgelist(edge_df, 'NodeID', 'TargetID')
G.add_nodes_from(node_df['NodeID'])

此代码将以简单的方式创建网络i,但是我仍然遇到问题,即无法为节点分配属性。

这个问题是否有解决方案,在我创建大量大图结构时,在某种程度上节省了资源。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找nx.set_node_attributes()。此功能将允许您从已经创建的网络上的节点上创建所需的属性。

NetworkX功能页面上的示例:

G = nx.path_graph(3)
attrs = {0: {'attr1': 20, 'attr2': 'nothing'}, 1: {'attr2': 3}}
nx.set_node_attributes(G, attrs)