我创建了一个名为G
的Networkx graph
,如下所示:
import networkx as nx
G = nx.Graph()
G.add_node(1,job= 'teacher', boss = 'dee')
G.add_node(2,job= 'teacher', boss = 'foo')
G.add_node(3,job= 'admin', boss = 'dee')
G.add_node(4,job= 'admin', boss = 'lopez')
我希望将node
编号与attributes
、job
和boss
沿着存储在pandas
dataframe
的单独列中。
我已经尝试用下面的代码来做这件事,但是它产生了一个有2列的dataframe
,一列是node
的数字,一列是所有的attributes
:
graph = G.nodes(data = True)
import pandas as pd
df = pd.DataFrame(graph)
df
Out[19]:
0 1
0 1 {u'job': u'teacher', u'boss': u'dee'}
1 2 {u'job': u'teacher', u'boss': u'foo'}
2 3 {u'job': u'admin', u'boss': u'dee'}
3 4 {u'job': u'admin', u'boss': u'lopez'}
注意:我承认NetworkX
具有to_pandas_dataframe
函数,但它没有提供具有我所寻找的输出的dataframe
。
5条答案
按热度按时间x3naxklr1#
这里有一句俏皮话。
kqlmhetl2#
我觉得这更简单:
而不必转换到另一个口授。
tzdcorbm3#
我不知道您的数据有多具有代表性,但修改我的代码以在您的真实的网络上工作应该很简单:
这里我所做的就是从图形数据中构造一个字典,Pandas接受字典作为数据,其中键是列名,数据必须是类似数组的,在本例中是值列表
更动态的方法:
guicsvcw4#
我更新了这个解决方案,以配合我的更新版本的NetworkX(2. 0),并认为我会分享。我还让函数返回一个Pandas Dataframe 。
iszxjhcz5#
我已经用
dictionary comprehension
解决了这个问题。字典
d
将节点n
Map到dag.nodes[n]
。第二个表达式dag.nodes[n]
本身就是一个字典,它具有所有属性:{attribute_name:attribute_value}
所以你的字典
d
的形式是:我看到的优点是您不需要知道属性的名称。
如果您不想让节点ID作为索引,而是作为列,则可以添加作为最后一个命令: