使用networkx加权边缘列表时出错

时间:2017-04-16 18:15:01

标签: python networkx weighted-graph

我创建了一个加权边缘列表,我试图用它来生成加权无向图:

数据位于csv中,在excel中如下所示:

node1 node2 weight

a     b     0.1

a     c     0.3

根据其他StackOverflow帖子的建议,我一直在使用以下代码来读取csv:

fh=open("<file_location>.csv", 'r')
G = nx.read_weighted_edgelist(fh,delimiter=',')

第一行运行正常但第二行产生错误消息:

TypeError: Failed to convert weight data weight to type type 'float'

如果我检查G,它已经在节点中读取了很好但没有权重,任何想法?

2 个答案:

答案 0 :(得分:3)

编辑重组以包含解释代码失败的原因以及解决方法,遵循@ Joel的建议。 @ Joel的回答解释了为什么代码失败,但没有建议如何解决它。

解决方案

nx.read_weighted_edgelist将忽略以#开头的输入行,因此如果您更改csv文件的第一行

node1 node2 weight

#node1 node2 weight

然后你应该能够在网络中读取权重。

另请注意read_weighted_edgelist接受文件路径(字符串)和文件句柄,因此如果您不再使用fh,则无需先打开它,只需直接传递它。

G = nx.read_weighted_edgelist("<file_location>.csv", delimiter=',')

为什么您的代码失败

(这是@Joel的回答)

遇到第一行(来自您的评论:a_node1,b_node2,c_weight

它将第一个节点解释为a_node1,第二个节点解释为b_node2,并尝试将权重c_weight分配给它们之间的边缘。

很难将字符串c_weight转换为浮点数。所以它给出了一个错误。

答案 1 :(得分:1)

遇到第一行(来自您的评论:a_node1,b_node2,c_weight

它将第一个节点解释为a_node1,第二个节点解释为b_node2,并尝试将权重c_weight分配给它们之间的边缘。

很难将字符串c_weight转换为浮点数。所以它给出了一个错误。