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

使用Networkx从Pandas创建加权图时遇TypeError问题求助

解决NetworkX创建加权图的TypeError问题

错误原因在于你使用add_edges_from时的参数用法错误:add_edges_from(data, weight="weight")里的weight参数是用来给所有边设置相同的固定属性值,但你的data中每个元组是(起点, 终点, 权重值)的格式,这种情况下NetworkX会错误地尝试迭代权重值(int类型不可迭代),从而抛出TypeError: 'int' object is not iterable。

下面是两种可行的解决办法:

方法一:使用add_weighted_edges_from(推荐)

这个方法专门适配(u, v, weight_value)格式的边数据,默认会将第三个值作为weight属性:

import pandas as pd
import networkx as nx
dictt = {"from" :["A", "B", "C"], "to":["B", "D", "A"],}
distmat = pd.DataFrame.from_dict(dictt)
distmat["weight"] = [1, 2, 4]
d = distmat.to_numpy()
data = list(map(tuple, d))
G = nx.Graph()
# 直接用add_weighted_edges_from加载数据,自动识别权重
G.add_weighted_edges_from(data)

方法二:调整边数据格式后用add_edges_from

把每个边数据转换成(u, v, {'weight': weight_value})的字典格式,再传入add_edges_from:

import pandas as pd
import networkx as nx
dictt = {"from" :["A", "B", "C"], "to":["B", "D", "A"],}
distmat = pd.DataFrame.from_dict(dictt)
distmat["weight"] = [1, 2, 4]
# 生成包含属性字典的边列表
data = [(row['from'], row['to'], {'weight': row['weight']}) for _, row in distmat.iterrows()]
G = nx.Graph()
G.add_edges_from(data)

验证方式:执行nx.get_edge_attributes(G, 'weight')可以查看边的权重,会得到{('A', 'B'): 1, ('B', 'D'): 2, ('A', 'C'): 4},说明权重设置成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:40