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

使用NetworkX读取CSV边列表构建图时遇KeyError: 'source'求助

解决NetworkX读取边列表时的KeyError问题

错误原因

nx.from_pandas_edgelist默认会查找名为source(小写)和target(小写)的列,但你的CSV文件存在两个不匹配问题:

  • 第一列表头拼写错误:写成了Surce(正确应为Source)
  • 第二列表头是大写的Target,和函数默认的target命名不符

这两个问题导致函数找不到预期的列,触发KeyError: 'source'。

解决方案

方案1:修改CSV表头

直接把CSV的第一行改成:

source,target,genre_ids

修改后原代码无需改动即可正常运行。

方案2:在代码中显式指定列名

如果不想修改CSV文件,就在from_pandas_edgelist中通过source和target参数指定对应列名,同时可以顺便清理节点名的多余空格(比如示例里Happy Feet, Froze,23中的Froze前面带空格):

修改后的完整代码:

import pandas as pd
import networkx as nx

# 读取CSV文件
df = pd.read_csv('edges1.csv')
# 清理节点名前后的空格,避免节点名带空格导致识别错误
df['Surce'] = df['Surce'].str.strip()
df['Target'] = df['Target'].str.strip()
# 显式指定源节点和目标节点的列名
Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, source='Surce', target='Target', edge_attr='genre_ids', create_using=Graphtype)
# 计算介数中心性
centrality = nx.betweenness_centrality(G, normalize=False)
print(centrality)

额外提示

CSV示例第三行的Froze前面有多余空格,会导致该节点被识别为 Froze(带空格),和正常的Froze被视为两个不同节点,建议用代码中的str.strip()处理所有节点列,避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:00:48