如何将 Graph (NetworkX) 的节点属性输出到 DataFrame (Pandas)

How to output attributes of nodes of a Graph (NetworkX) into a DataFrame (Pandas)

我正在使用网络作为西班牙戏剧中角色之间互动的图表。这是一个可视化:

我将节点(角色)的几个属性作为数据框传递给网络,以便我可以使用这些值(例如,节点的颜色由角色的性别设置)。我想用 NetworkX 为每个节点计算不同的值(度数、中心性、中间性……);然后,我想将我的节点属性以及使用 NetworkX 计算的值作为 DataFrame 输出。我知道我可以询问节点的特定属性,例如:

nx.get_node_attributes(graph,'degree')

我可以使用它构建一个 DataFrame,但我想知道是否有更优雅的解决方案。我也试过:

nx.to_dict_of_dicts(graph)

但这只输出边,不输出节点信息。

那么,有什么帮助吗?谢谢!

如果我对你的问题的理解正确,你想要一个包含节点和每个节点的一些属性的 DataFrame。

G = nx.Graph()
G.add_node(1, {'x': 11, 'y': 111})
G.add_node(2, {'x': 22, 'y': 222})

您可以使用list comprehension获取特定节点属性:

pd.DataFrame([[i[0], i[1]['x'], i[1]['y']] for i in G.nodes(data=True)]
             , columns=['node_name', 'x', 'y']).set_index('node_name')


#           x   y
#node_name      
#1         11   111
#2         22   222

或者如果有很多属性并且您需要所有属性,这可能是更好的解决方案:

pd.DataFrame([i[1] for i in G.nodes(data=True)], index=[i[0] for i in G.nodes(data=True)])