尝试使用networkx向图形添加边和节点

2024-04-25 06:14:01 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个数据帧,我试图用networkx把它放到一个图形中。数据帧示例如下:

Alabama Alabama 0
Alabama Alaska  0
Alabama Arizona 0
Alabama Arkansas    1
Alabama California  1
Alabama Colorado    1
Alabama Connecticut 0
Alabama Delaware    0

我正在尝试设置它,以便0和1是同一列中相应节点之间的边。所以节点阿拉巴马阿拉巴马会有一个0的自循环,等等。我试过了

graph = nx.Graph() graph.add_edges_from([test3])

但它给了我一个错误:dtype:int64必须是2元组或3元组。在

考虑到可能需要更改此数据帧,我应该如何创建此图。在

注:这个数据帧有2601个边,在美国所有州。在


Tags: 数据networkx图形示例节点graph元组california
1条回答
网友
1楼 · 发布于 2024-04-25 06:14:01

我不太明白你说的0的边或循环是什么意思。我想你的意思是0表示没有边,1表示有边。在

命令graph.add_edges_from([test3])需要一个边列表作为其输入(类似于[(1,2), (2,3), (1,5)])。您将给它一个唯一的条目是test3的列表。在

Networkx有一个内置函数,用于从pandas数据帧中读入from_pandas_dataframe(df, source, target, edge_attr=None, create_using=None)。在

但是,它期望每一行都是一条边(如果您只想为这些边指定一个0或1的属性,那么就设置了)。选中the documentation。在

如果您的意思是0被解释为没有边,那么您需要在调用此函数之前去掉这些条目。否则,您可以查看the source code,并且几乎可以遵循它,除了在add_edge命令之前添加一个值是0还是1的测试。在

我相信以下方法是可行的(其中df是数据帧,source是一个状态列的名称,target是另一个状态列的名称,value是0/1列的名称:

g=nx.Graph() #undirected, no loops.
src_i = df.columns.get_loc(source)
tar_i = df.columns.get_loc(target)
val_i = df.columns.get_loc(value)
for row in df.values:
    if row[val_i] == 1:
        g.add_edge(row[src_i], row[tar_i])

相关问题 更多 >