首页 > 解决方案 > 从 DataFrame 生成具有节点和边属性的图形

问题描述

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

[节点 ID、目标 ID、节点属性 1、节点属性 2]

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

我努力了:

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,但我仍然遇到问题,即我无法将属性分配给我的节点。

这个问题有没有解决方案,有点资源效率,因为我正在创建许多大图结构。

标签: pythonpython-3.xpandasnetworkxnetwork-analysis

解决方案


我想你正在寻找 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)

推荐阅读