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

NetworkX从CSV导入节点/边失败,求正确构建图的方法

解决NetworkX从CSV构建图的问题

问题根源

你用sknetwork.data.from_csv读取的结果并不是NetworkX能直接识别的节点ID列表或边元组格式——sknetwork的这个方法返回的是邻接矩阵(边文件)或特征矩阵(节点文件),不是原生的节点/边列表,直接转成列表传给NetworkX的add_nodes_from/add_edges_from自然无效。

正确方案:直接解析CSV文件

放弃sknetwork的from_csv,用Python内置csv模块读取并解析数据,转换成NetworkX需要的格式。

1. 读取边文件(real_edges.csv)

边文件每行格式是(节点1, 节点2) 权重,提取节点对并添加到图中:

import csv
import networkx as nx

G = nx.Graph()

# 读取边
with open("real_edges.csv", "r") as f:
    # 假设分隔符是制表符,若实际是空格可调整为delimiter=" "
    reader = csv.reader(f, delimiter="\t")  
    for row in reader:
        # 解析节点对:去除括号、分割节点ID
        node_part = row[0].strip().strip("()")
        u, v = node_part.split(",")
        u = int(u.strip())
        v = int(v.strip())
        # 解析权重(可选,无权重则默认1)
        weight = int(row[1].strip()) if len(row) > 1 else 1
        G.add_edge(u, v, weight=weight)

2. 读取节点文件(real-fnodes.csv)

根据你提供的两种节点数据格式,分情况处理:

情况A:节点行格式为(节点ID, 属性) 标记

# 读取节点属性并添加到图中
with open("real-fnodes.csv", "r") as f:
    reader = csv.reader(f, delimiter="\t")
    for row in reader:
        node_part = row[0].strip().strip("()")
        node_id, attr_val = node_part.split(",")
        node_id = int(node_id.strip())
        attr_val = int(attr_val.strip())
        label = int(row[1].strip()) if len(row) > 1 else 1
        # 为节点绑定属性
        G.nodes[node_id]["attr"] = attr_val
        G.nodes[node_id]["label"] = label

情况B:节点行是多属性格式(对应你的列表示例)

with open("real-fnodes.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        node_id = int(row[0])
        # 将后续元素转为数值型特征
        features = [float(val) for val in row[1:]]
        G.nodes[node_id]["features"] = features

3. 验证图结构

运行后用以下代码确认结果:

print("节点数:", G.number_of_nodes())
print("边数:", G.number_of_edges())
# 查看指定节点的属性
print(G.nodes[0])

备选方案:用sknetwork转成NetworkX图

如果一定要用sknetwork,可先构建sknetwork图对象再转格式:

from sknetwork.data import from_edge_list, from_csv
import networkx as nx

# 读取边列表并生成邻接矩阵
adjacency = from_edge_list("real_edges.csv", delimiter="\t", weighted=True)
# 转成NetworkX图
G = nx.from_scipy_sparse_array(adjacency)

# 读取节点特征矩阵并绑定属性
node_features = from_csv("real-fnodes.csv")
for i, features in enumerate(node_features):
    G.nodes[i]["features"] = features.tolist()

内容的提问来源于stack exchange,提问作者Data Science Analytics Manager

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:47:36