使用networkx / plotly从熊猫数据框创建网络
我试图用一个熊猫数据框来构建一个网络,它有四列,如下所示:
PTDID | PBDID | BTDID | BDDID
PTD000000 | PBD000024 | BTD000264 | BDD000288
PTD000001 | PBD000025 | BTD000264 | BDD000289
PTD000001 | PBD000025 | BTD000264 | BDD000290
PTD000001 | PBD000025 | BTD000264 | BDD000291
PTD000001 | PBD000025 | BTD000264 | BDD000292
PTD000000 | PBD000024 | BTD000264 | BDD000293
...等36k行
我试图用我的数据框重新创建这个例子:https://plot.ly/python/network-graphs/
但是,我收到'KeyError:0'消息。
我现在的代码:
import pandas as pd
import plotly.plotly as py
from plotly.graph_objs import *
import networkx as nx
import numpy as np
df=pd.read_csv('C:UsersnkurdobDocumentsbdh5.csv')
#get node positions
G=nx.from_pandas_dataframe(df, 'BTDID', 'BDDID', ['PTDID', 'PBDID'])
pos=nx.get_node_attributes(G,'pos')
dmin=1
ncenter=0
for n in pos:
x,y=pos[n]
d=(x-0.5)**2+(y-0.5)**2
if d<dmin:
ncenter=n
dmin=d
p=nx.single_source_shortest_path_length(G,ncenter)
有谁知道如何克服这个错误? 我认为这条线可能会搞乱它:
G=nx.from_pandas_dataframe(df, 'BTDID', 'BDDID', ['PTDID', 'PBDID'])
但我不知道如何解决它。 我通过下面的示例得到了这个^:http://networkx.readthedocs.io/en/latest/reference/generated/networkx.convert_matrix.from_pandas_dataframe.html
先谢谢你!
纳扎尔
编辑:追溯错误:
runfile('L:/ Data / Global ID / Nazar / bdh.py',wdir ='L:/ Data / Global ID / Nazar')Traceback(最近一次调用最后一次):
文件“”,第1行,在runfile中('L:/ Data / Global ID / Nazar / bdh.py',wdir ='L:/ Data / Global ID / Nazar')
(filename,namespace)中的文件“C: Users nkurdob AppData Local Continuum Anaconda2 lib site-packages spyderlib widgets externalshell sitecustomize.py”第714行。
在execfile exec(compile(scripttext,filename,'exec')中的第74行的文件“C: Users nkurdob AppData Local Continuum Anaconda2 lib site-packages spyderlib widgets externalshell sitecustomize.py” ),glob,loc)
文件“L:/ Data / Global ID / Nazar / bdh.py”,第32行,在p = nx.single_source_shortest_path_length(G,ncenter)
文件“C: Users nkurdob AppData Local Continuum Anaconda2 lib site-packages networkx algorithms shortest_paths unweighted.py”,第63行,在single_source_shortest_path_length nextlevel.update(G [v])#add诉的邻居
文件“C: Users nkurdob AppData Local Continuum Anaconda2 lib site-packages networkx classes graph.py”,第407行,在getitem中返回self.adj [n]
KeyError:0
看起来你并没有将pos
定义为节点属性。 所以当你做pos = nx.get_node_attributes(G,'pos')
,它会变成一个空dict
。
因此for n in pos
中的for n in pos
循环什么都不做。 所以在循环之后, ncenter
仍然是0。 由于你的图没有节点0
,当你要求它从ncenter
找到路径时,你会遇到一个ncenter
。
上一篇: Creating network with networkx / plotly from a pandas dataframe