python - 从 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,但我仍然遇到问题,即我无法将属性分配给我的节点。
这个问题有没有解决方案,有点资源效率,因为我正在创建许多大图结构。
解决方案
我想你正在寻找 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)
推荐阅读
- css - 在这种折叠或展开 CSS 过渡期间导致跳跃的原因是什么?
- sql - 查找计算电子商务数据集一阶和二阶之间时间的查询
- google-apps-script - 事件重复次数作为事件描述中的变量 Google App Script Calendar
- angular - TypeError:无法读取未定义的属性“名称”。角 7
- javascript - 在 javascript 中搜索 JSON 数组中的数字
- ssh - 如何在OpenStack中访问实例,配置外网
- c# - 如何解决 C# 中 ChromiumWebBrowser 的滞后问题?
- magento - “价格”属性值为空。设置属性,然后重试。在 Magento 2 中创建可配置产品时出错
- arrays - 如何在单个工作簿中跨多个工作表进行 COUNTUNIQUE
- java - 如何将 MouseListener 留在 ChildComponent 上但正确跟踪鼠标在父级上的进入和退出?