【发布时间】: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_names 和edges 时:
['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