从CSV邻接矩阵DataFrame创建DiGraph失败:生成Graph而非DiGraph求助
解决NetworkX从邻接矩阵创建DiGraph却得到Graph的问题
嘿,别担心!作为新手遇到这种小问题太正常了,我一步步帮你排查解决~
首先,我们先明确核心问题:你明明指定了create_using=nx.DiGraph(),但生成的图却显示是无向Graph,这大概率是几个小细节没注意到,我们逐个排查:
第一步:检查代码导入与执行顺序
先确保你完整导入了需要的库,并且没有重复定义变量G覆盖结果:
# 先导入正确的库 import pandas as pd import networkx as nx # 加载CSV并创建有向图 Gdf = pd.read_csv("outputtest.csv", index_col=0) G = nx.from_pandas_adjacency(Gdf, create_using=nx.DiGraph()) # 直接检查图的类型(比nx.info更准确) print("图的类型:", type(G)) # 再打印info信息 print(nx.info(G))
如果之前你运行过创建无向Graph的代码,变量G可能被旧的无向图覆盖了,建议重启你的Python运行环境(比如Jupyter重启内核,终端重新运行脚本),再单独执行上面的代码。
第二步:测试小例子验证功能是否正常
我们手动创建一个非对称的邻接矩阵,测试NetworkX的from_pandas_adjacency是否能正常生成有向图:
# 创建一个测试用的非对称邻接矩阵(A→B,B→C,没有反向边) test_data = { 'A': [0, 1, 0], 'B': [0, 0, 1], 'C': [0, 0, 0] } test_df = pd.DataFrame(test_data, index=['A', 'B', 'C']) # 创建有向图 G_test = nx.from_pandas_adjacency(test_df, create_using=nx.DiGraph()) # 查看结果 print("测试图的类型:", type(G_test)) # 应该输出 <class 'networkx.classes.digraph.DiGraph'> print(nx.info(G_test))
如果这个测试代码能正常生成DiGraph,说明你的NetworkX功能是正常的,问题出在你的原始CSV文件上。
第三步:检查你的CSV邻接矩阵
如果测试没问题,但你的原始图还是显示Graph,大概率是你的邻接矩阵是完全对称的(比如A到B的权重等于B到A的权重)。不过即使是对称矩阵,NetworkX也应该生成有向图(每条边会有双向的两条有向边),这时候你可以查看图的边来确认:
# 查看图中的所有边 print("图中的边:", list(G.edges()))
如果输出的边是双向的(比如('A','B')和('B','A')都存在),那说明其实已经生成了DiGraph;如果还是显示无向边,那可能是你的NetworkX版本太旧了。
第四步:升级NetworkX版本
旧版本的NetworkX可能存在一些小bug,建议升级到最新版:
pip install --upgrade networkx
升级后再重新运行你的代码试试。
如果做完以上步骤还是有问题,可以把你的CSV文件的前几行内容贴出来,我再帮你针对性排查~
内容的提问来源于stack exchange,提问作者L. Hiao
相关产品推荐
相关产品推荐

