简体   繁体   中英

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

I am working with networks as graph of the interaction between characters in Spanish theatre plays. Here a visualisation:

Bodas de Sangre 网络,作者 Lorca

I passed several attributes of the nodes (characters) as a dataframe to the network, so that I can use this values (for example the color of the nodes is set by the gender of the character). I want to calculate with NetworkX different values for each nodes (degree, centrality, betweenness...); then, I would like to output as a DataFrame both my attributes of the nodes and also the values calculated with NetworkX. I know I can ask for specific attributes of the nodes, like:

nx.get_node_attributes(graph,'degree')

And I could build a DataFrame using that, but I wonder if there is no a more elegant solution. I have tried also:

nx.to_dict_of_dicts(graph)

But this outputs only the edges and not the information about the nodes.

So, any help, please? Thanks!

If I understand your question correctly, you want to have a DataFrame which has nodes and some of the attribute of each node.

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

You can use list comprehension as follow to get specific node attributes:

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

or if there are many attributes and you need all of them, this could be a better solution:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM