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

时间:2017-10-25 06:37:52

标签: python pandas graph-theory networkx

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

Network of Bodas de Sangre, by Lorca

我将节点(字符)的几个属性作为数据帧传递给网络,以便我可以使用此值(例如,节点的颜色由字符的性别设置)。我想用NetworkX计算每个节点的不同值(度数,中心性,中介性......);然后,我想输出DataFrame作为节点的属性以及使用NetworkX计算的值。我知道我可以要求节点的特定属性,例如:

nx.get_node_attributes(graph,'degree')

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

nx.to_dict_of_dicts(graph)

但是这只输出边缘而不是有关节点的信息。

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

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望拥有一个具有节点和每个节点的某些属性的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)])