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

Python 从DataFrame生成具有节点和边属性的图形,python,python-3.x,pandas,networkx,network-analysis,Python,Python 3.x,Pandas,Networkx,Network Analysis,我有一个pandas数据帧,我想将其转换成网络,其结构如下: [NodeID、TargetID、NodeAttr1、NodeAttr2] 但问题是,我确实有一些行,其中TargetID可能为None,因为网络中有一些节点没有连接。 有没有一种简单的方法来创建网络结构并分配我的属性 我试过: G=nx.来自边缘列表(df) 但是这个方法只给了我添加边属性的选项,没有给节点添加任何属性。它还将从未连接到空心的节点创建边。所以不是我想要的 将熊猫作为pd导入 将networkx导入为nx d={'N

我有一个pandas数据帧,我想将其转换成网络,其结构如下:

[NodeID、TargetID、NodeAttr1、NodeAttr2]

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

我试过:

G=nx.来自边缘列表(df)
但是这个方法只给了我添加边属性的选项,没有给节点添加任何属性。它还将从未连接到空心的节点创建边。所以不是我想要的

将熊猫作为pd导入
将networkx导入为nx
d={'NodeID':[1,2],'TargetID':[2,无],'NodeAttr1':['aaaa','bbbbb'],'NodeAttr2':[3,4]}
df=pd.DataFrame(数据=d)
node_df=df[df['node_ID']]
edge_df=df[df.TargetID.notnull()]
G=nx.来自edgelist(edge_df,'NodeID','TargetID')
G.add_nodes_from(node_df['NodeID']))
这段代码将以一种简单的方式创建网络i,但我仍然存在一个问题,即无法为节点分配属性


有没有解决这个问题的方法,这在一定程度上节省了资源,因为我正在创建许多大型图形结构。

我想您正在寻找。此功能将允许您从已创建的网络在节点上创建所需的属性

NetworkX功能页中的示例:

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

我想你在找我。此功能将允许您从已创建的网络在节点上创建所需的属性

NetworkX功能页中的示例:

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

我不知道它是否具有资源效率,但我认为如果您使用
pandas.DataFrame.to _dict
函数和正确的参数(我认为您希望使用
orient=“index”
)从传递到
添加节点,\u,您可能会接近。您可能需要创建两个单独的图形并组合它们,以便将边合并到具有属性的节点中。我不知道这是否节省资源,但我认为如果您使用带有正确参数的
pandas.DataFrame.to\u dict
函数(我想您希望使用
orient=“index”
)从
传递到
添加节点,你可能会接近。您可能需要创建两个单独的图形并组合它们,以便将边合并到具有属性的节点中。