【问题标题】:Generate Graph with node and edge attributes from DataFrame从 DataFrame 生成具有节点和边属性的图形
【发布时间】:2019-11-16 19:08:10
【问题描述】:

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

[NodeID, TargetID, NodeAttr1, NodeAttr2]

但问题是,我确实有一些行,其中 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,但我仍然遇到问题,即我无法将属性分配给我的节点。

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

【问题讨论】:

  • 我不知道它是否节省资源,但我认为如果您使用带有正确参数的pandas.DataFrame.to_dict 函数(我认为您想使用orient="index")传递到@987654325 @,你可能会接近。您可能需要创建两个单独的图并组合它们以将边合并到具有属性的节点中。

标签: python python-3.x pandas networkx network-analysis


【解决方案1】:

我认为您正在寻找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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2010-12-16
    • 2021-01-08
    • 2017-05-17
    相关资源
    最近更新 更多