3

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

数据在 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,它已经很好地读取了节点但没有读取权重,有什么想法吗?

4

2 回答 2

4

编辑:按照@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为浮点数。所以它给出了一个错误。

于 2017-04-17T14:07:56.123 回答
1

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

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

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

于 2017-04-16T22:33:02.583 回答