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

基于CSV文件构建图并计算边关联节点共同邻居的问题求助

修复图加载错误及共同邻居计算问题

问题根源

你的代码存在三个核心问题:

  1. 错误遍历DataFrame结构:for row in node和for row in edges实际是遍历DataFrame的列名,而非逐行读取节点/边数据,导致仅加载了少量节点和边。
  2. CSV读取未处理列名:nodes.csv和edges.csv无列名,但pd.read_csv默认将第一行数据当作列名,导致后续数据未被正确读取。
  3. 节点类型不匹配:CSV读取的节点ID可能为字符串类型,与代码中使用的整数ID不匹配,触发"u is not in the graph"错误。

修复后的完整代码

import networkx as nx
import pandas as pd

G = nx.Graph()

# 读取节点文件:指定无列名,将所有节点ID转为整数后添加到图中
nodes_df = pd.read_csv("nodes.csv", header=None)
for node_id in nodes_df[0].astype(int):
    G.add_node(node_id)

# 读取边文件:指定无列名,按空格分隔(若你的CSV用逗号分隔,改为sep=",")
edges_df = pd.read_csv("edges.csv", header=None, sep=" ")
for _, row in edges_df.iterrows():
    u = int(row[0])
    v = int(row[1])
    # 跳过空值行,避免无效边
    if pd.notna(u) and pd.notna(v):
        G.add_edge(u, v)

print(G)  # 现在应显示182个节点和300条边

def predict(u, v):
    # 先校验节点是否存在于图中
    if u not in G or v not in G:
        return 0.0
    common_neighbors = list(nx.common_neighbors(G, u, v))
    degree_product = G.degree(u) * G.degree(v)
    return len(common_neighbors) / degree_product if degree_product != 0 else 0.0

# 遍历所有边计算共同邻居指标
for _, row in edges_df.iterrows():
    u = int(row[0])
    v = int(row[1])
    score = predict(u, v)
    print(f"边({u}, {v})的共同邻居指标:{score:.4f}")

# 可选:将计算结果保存到CSV文件
output_df = pd.DataFrame([
    (int(row[0]), int(row[1]), predict(int(row[0]), int(row[1])))
    for _, row in edges_df.iterrows()
], columns=["节点1", "节点2", "共同邻居指标"])
output_df.to_csv("边共同邻居指标.csv", index=False)

关键修复点说明

  • header=None:明确告诉pandas CSV文件没有列名,避免将第一行数据误判为列名。
  • astype(int):强制将节点ID转为整数,保证图中节点与遍历使用的ID类型完全一致。
  • iterrows():正确遍历DataFrame的每行数据,获取每条边的两个节点ID。
  • 节点存在性检查:在predict函数中先确认节点在图中,避免因数据异常导致的报错。

内容的提问来源于stack exchange,提问作者raghad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:20:38