Python 在短划线/绘图仪中显示属性的后续操作将导致KeyError
在回答了我的问题后,我决定使用内部数据(我不能在这里共享)。内部数据采用与模拟数据相同的格式。我只是简单地将数据复制到同一个工作目录,确保新数据具有相同的格式,即相同的列标题等。我使用DiffChecker确保Python 在短划线/绘图仪中显示属性的后续操作将导致KeyError,python,networkx,Python,Networkx,在回答了我的问题后,我决定使用内部数据(我不能在这里共享)。内部数据采用与模拟数据相同的格式。我只是简单地将数据复制到同一个工作目录,确保新数据具有相同的格式,即相同的列标题等。我使用DiffChecker确保app.py(来自我的原始帖子)与概念验证(appPOC.py)匹配。内部数据有600多个节点和3000多条边 制作交互式仪表板的代码与我在我的应用程序中使用的代码相同。然而,这次我遇到了这个keyrerror: Traceback (most recent call last): F
app.py
(来自我的原始帖子)与概念验证(appPOC.py
)匹配。内部数据有600多个节点和3000多条边
制作交互式仪表板的代码与我在我的应用程序中使用的代码相同。然而,这次我遇到了这个keyrerror
:
Traceback (most recent call last):
File "appPOC.py", line 75, in <module>
hovertext = "Document Description: " + str(G.nodes[node]['Description']) + "<br>" + "Document Name: " + str(G.nodes[node]['DocName']) + "<br>" + "Document ID: " + str(G.nodes[node]['DocumentID'])
KeyError: 'Description'
回溯(最近一次呼叫最后一次):
文件“appPOC.py”,第75行,在
hovertext=“文档描述:”+str(G.nodes[node]['Description'])+”
“+”文档名称:“+str(G.nodes[node]['DocName'])+”
“+”文档ID:“+str(G.nodes[node]['DocumentID']))
KeyError:“描述”
数据本身应该很好,因为我可以在节点旁边绘制网络,而不需要悬停文本
总而言之:app.py
可以打印模拟数据,appPOC.py
(相同,但文件名不同)不能打印内部数据。这使我相信CSV
文件中的内部数据有问题
编辑:我发现如果元素中未列出目标,则无法绘制图形。如果元素中未定义(目标)节点,是否可以自动创建节点(如Gephi中的节点)?
NetworkX
为每条边的“自”和“至”节点创建节点。因此,
G = nx.from_pandas_edgelist(edges, 'Source', 'Target')
您将看到该图具有所有可能的节点。但是,
nx.set_node_attributes(G, nodes.set_index('Doc')['Description'].to_dict(), 'Description')
nx.set_node_attributes(G, nodes.set_index('Doc')['DocumentID'].to_dict(), 'DocumentID')
仅为节点数据框中的节点填写节点属性'Description'
和'DocumentID'
。一个简单的解决方法是替换
str(G.nodes[node]['Description'])
与
对于'DocName'
和'DocumentID'
也是如此。有关get方法的更多信息,请访问:
基本上,我们使用networkx
使用dict
存储值,并使用get
方法,该方法允许提供默认值
一个简单的可重复和最小的例子
str(G.nodes[node].get('Description', ''))
import networkx as nx
g = nx.karate_club_graph()
# all nodes in this graph have the node attribute 'club' filled
# we add a node without this node attribute
g.add_node("Test")
print(g.nodes[0]["club"])
# 'Mr. Hi'
# print(g.nodes["Test"]["club"]
# results in KeyError: 'club'
print(g.nodes["Test"].get("club", ""))
# ''