繁体   English   中英

为什么networkx在添加边后减少节点数

[英]Why does networkx reduce number of nodes after adding edges

我需要首先说我的代码运行时没有任何错误消息,但我不明白某些结果。

我从 Pandas 数据框在 networkx 中创建了一个图形,它有 398595 个整数 ID。

# Create Graph
G = nx.Graph()
G.name = "Graph from Pandas"

# Add Nodes to Graph
G.add_nodes_from(test_df['ID'].tolist())
print(nx.info(G))

nx.info(G) 的输出如下,这也是我所期望的:

Type: Graph
Number of nodes: 398595
Number of edges: 0
Average degree:   0.0000

然后我加载第二个 pandas 数据框,它包含 5556353 个条目并具有三列:

ID1    ID2    weight
3      198    0.601002
3      183    0.618057

ID1 或 ID2 中的每个 ID 也存在于第一个 Pandas 数据帧中,因此我按如下方式加载边:

# Add data to Graph
G = nx.from_pandas_edgelist(df,source='ID1',target='ID2', edge_attr='weight')
print(nx.info(G))

然而,这是我不明白的,nx.info(G) 的输出现在返回:

Type: Graph
Number of nodes: 29348
Number of edges: 4371353
Average degree: 297.8978

现在我的问题是(1)为什么这个图中的节点比以前少;(2)为什么这个图中的边比数据框中可用的边少得多?

  1. df 的 ID1 和 ID2 之间的唯一 ID 可能比 test_df 的 ID 列中的要少。 我要检查的第一件事是 df 中 ID1 和 ID2 的唯一 ID 是否等于您显示的节点数len(pd.unique(df[['ID1','ID2']].values.ravel())) (应等于 29348)。
  2. 边较少的原因之一是数据帧中是否存在有向边。 nx.from_pandas_edgelist的 create_using 参数的默认值是nx.Graph()因此边将被视为无向边并删除多个边。 如果您想要有向边、多条边或两者,请尝试分别将 nx.DiGraph、nx.MultiGraph 或 nx.MultiDiGraph 传递给create_using参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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