如何解决为什么增加边缘后networkx会减少节点数
我首先要说我的代码运行时没有任何错误消息,但是我不理解其中的某些结果。
我用一个398595整数ID的pandas数据框在networkx中创建了一个图形。
# 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
然后,我加载第二个熊猫数据框,其中包含5556353条目并具有三列:
ID1 ID2 weight
3 198 0.601002
3 183 0.618057
ID1或ID2中的每个ID也都存在于第一个熊猫数据框中,因此我按如下方式加载边缘:
# 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)为什么该图中的边比数据帧中可用的边少得多?
解决方法
- df的ID1和ID2之间的唯一ID可能比test_df的ID列中的唯一ID少。我要检查的第一件事是df中ID1和ID2中的唯一ID是否等于您显示的
len(pd.unique(df[['ID1','ID2']].values.ravel()))
节点数(应等于29348)。 - 边缘较少的一个原因是数据帧中是否有定向边缘。
nx.from_pandas_edgelist
的create_using参数的默认值为nx.Graph()
,因此边缘将被视为无向并删除多个边缘。如果要有方向的边,多条边或同时有这两个边,请尝试分别将nx.DiGraph,nx.MultiGraph或nx.MultiDiGraph传递给create_using
参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。