【问题标题】:Loading CSV causing error when adding edges to Networkx Graph due to additional commas由于附加逗号,在向 Networkx Graph 添加边时加载 CSV 导致错误
【发布时间】:2020-06-08 13:35:25
【问题描述】:

您好,我正在与 Networkx 合作生成网络。

我有 2 个 CSV 文件,nodes.csv 和 edges.csv

对于nodes.csv,列是“名称”和“类型”,所以我有以下内容:

Name, Type
Gemini, System
EDD Case Management App, Module

对于edges.csv,columsn 是“Source”和“Target”,所以我有以下内容:

Source, Target
Gemini, EDD Case Management App

我用来加载数据的代码:

with open('nodes.csv', 'r') as nodecsv:
    nodereader = csv.reader(nodecsv)
    nodes=[n for n in nodereader][1:]

node_names = [n[0] for n in nodes]

with open('edges.csv', 'r') as edgecsv:
    edgereader = csv.reader(edgecsv)
    edges = [tuple(e) for e in edgereader][1:]

edge_names = [e[0] for e in edges]

当我打印node_namesedges 时:

['Gemini, System', 'EDD Case Management App, Module']

[('Gemini, EDD Case Management App',)]

我在 edges 中得到一个额外的逗号,当我将边缘数据加载到 Networkx 图表时导致下游错误

---------------------------------------------------------------------------
NetworkXError                             Traceback (most recent call last)
<ipython-input-19-3dbbe371ce6c> in <module>
      1 G.add_nodes_from(node_names)
----> 2 G.add_edges_from(edges)

C:\ProgramData\Anaconda3\lib\site-packages\networkx\classes\graph.py in add_edges_from(self, ebunch_to_add, **attr)
    950             else:
    951                 raise NetworkXError(
--> 952                     "Edge tuple %s must be a 2-tuple or 3-tuple." % (e,))
    953             if u not in self._node:
    954                 self._adj[u] = self.adjlist_inner_dict_factory()

NetworkXError: Edge tuple ('Gemini, EDD Case Management App',) must be a 2-tuple or 3-tuple.

我是 Python 和 Networkx 的新手

如何删除额外的逗号?

【问题讨论】:

  • ('Gemini, EDD Case Management App',) 只有一个元素。第一个逗号在字符串文字内。第二个逗号与括号内的简单表达式不同
  • 看数据的时候,Gemini是Source,而EDD Case Management App是target,所以应该只是一个元素,因为那是目前数据集中唯一的Edge;我不明白为什么要添加额外的逗号
  • 它不是一个额外的逗号,它只是一个具有一个值的元组。要编写一个 1 值元组,您必须在末尾添加一个逗号,以便 python 知道它是一个元组。 (1)1 相同,但 (1,) 是一个包含一个元素的元组。您看到额外逗号的原因是因为它向您显示了 repr 值(即重新创建此对象的表达式),这就是您编写单值元组的方式。如果您检查,您会看到它只有一项而不是 2。逗号仅用于语法,实际上并不是对象自身的一部分
  • 谢谢,我想在 Networkx 文档之后,我以为我在遵循指导:容器中给出的每条边都将添加到图中。边必须以 2 元组 (u,v) 或 3 元组 (u,v,d) 的形式给出,其中 d 是包含边数据的字典。
  • 尝试了一堆不同的组合,我不知道如何用我拥有的数据集生成 2 元组或 3 元组..

标签: python-3.x jupyter-notebook networkx


【解决方案1】:

对于遇到此问题的其他人。

经过反复试验,重构 edges.csv 文件,将 Source 分配给 Col A,Target 分配给 Col B,解决了错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2015-10-15
    • 2013-01-29
    • 1970-01-01
    • 2021-05-05
    • 2019-03-28
    • 1970-01-01
    相关资源
    最近更新 更多