You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:48