使用NetworkX构建网络时如何为节点添加多类属性存储数据?
该需求完全可以实现,NetworkX原生支持为节点添加任意自定义属性,其底层每个节点都对应一个可自由扩展的属性字典,可按需存储各类非标签信息。常用的批量赋值方法有两种:
方法1:直接遍历边表批量赋值
如果你的节点属性都在当前构建边所用的swiss_lakes表中,可以直接遍历表行分别给两类节点设置属性:
for _, row in swiss_lakes.iterrows(): # 为con.taxonomy类节点设置对应属性 con_node = row["con.taxonomy"] G.nodes[con_node]["metabolic.type"] = row["con.metabolic.type"] G.nodes[con_node]["movement.type"] = row["con.movement.type"] # 为res.taxonomy类节点设置对应属性 res_node = row["res.taxonomy"] G.nodes[res_node]["metabolic.type"] = row["res.metabolic.type"] G.nodes[res_node]["movement.type"] = row["res.movement.type"]
如果存在同一节点同时出现在con.taxonomy和res.taxonomy两列的情况,建议提前对节点属性做去重汇总,避免后赋值的属性覆盖之前的正确值。
方法2:通过节点属性表批量赋值
如果你的节点属性已经单独整理为一张节点表(索引为节点taxonomy名称,列对应各类属性),可以用set_node_attributes方法一键赋值,效率更高:
# 假设node_attr_df为预整理的节点属性表,索引是节点名称 nx.set_node_attributes(G, node_attr_df.to_dict("index"))
赋值完成后,你可以通过G.nodes[节点名]直接读取该节点的所有属性。
内容的提问来源于stack exchange,提问作者willyg
相关产品推荐
相关产品推荐

