我确实有一个熊猫数据框,我想将其转换为网络,其结构如下:
[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,但是我仍然遇到问题,即无法为节点分配属性。
这个问题是否有解决方案,在我创建大量大图结构时,在某种程度上节省了资源。
答案 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)