Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在短划线/绘图仪中显示属性的后续操作将导致KeyError_Python_Networkx - Fatal编程技术网

Python 在短划线/绘图仪中显示属性的后续操作将导致KeyError

Python 在短划线/绘图仪中显示属性的后续操作将导致KeyError,python,networkx,Python,Networkx,在回答了我的问题后,我决定使用内部数据(我不能在这里共享)。内部数据采用与模拟数据相同的格式。我只是简单地将数据复制到同一个工作目录,确保新数据具有相同的格式,即相同的列标题等。我使用DiffChecker确保app.py(来自我的原始帖子)与概念验证(appPOC.py)匹配。内部数据有600多个节点和3000多条边 制作交互式仪表板的代码与我在我的应用程序中使用的代码相同。然而,这次我遇到了这个keyrerror: Traceback (most recent call last): F

在回答了我的问题后,我决定使用内部数据(我不能在这里共享)。内部数据采用与模拟数据相同的格式。我只是简单地将数据复制到同一个工作目录,确保新数据具有相同的格式,即相同的列标题等。我使用DiffChecker确保
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", ""))
# ''