[英]Creating network with networkx / plotly from a pandas dataframe - KeyError: 0
I'd trying to build a network from a pandas dataframe with four columns that look like this: 我试图从熊猫数据框中构建一个网络,其中有四列如下所示:
PTDID | PTDID | PBDID |
PBDID | BTDID |
BTDID | BDDID
BDDID
PTD000000 | PTD000000 | PBD000024 |
PBD000024 | BTD000264 |
BTD000264 | BDD000288
BDD000288
PTD000001 | PTD000001 | PBD000025 |
PBD000025 | BTD000264 |
BTD000264 | BDD000289
BDD000289
PTD000001 | PTD000001 | PBD000025 |
PBD000025 | BTD000264 |
BTD000264 | BDD000290
BDD000290
PTD000001 | PTD000001 | PBD000025 |
PBD000025 | BTD000264 |
BTD000264 | BDD000291
BDD000291
PTD000001 | PTD000001 | PBD000025 |
PBD000025 | BTD000264 |
BTD000264 | BDD000292
BDD000292
PTD000000 | PTD000000 | PBD000024 |
PBD000024 | BTD000264 |
BTD000264 | BDD000293
BDD000293
...and so on for 36k rows ...依此类推36k行
I'm trying to recreate this example with my dataframe : https://plot.ly/python/network-graphs/ 我正在尝试使用我的数据框重新创建此示例: https : //plot.ly/python/network-graphs/
However, I'm getting a 'KeyError: 0' message. 但是,我收到一条'KeyError:0'消息。
my current code: 我当前的代码:
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:\\Users\\nkurdob\\Documents\\bdh5.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)
Does anyone know how to get past this error? 有谁知道如何克服这个错误? I think this line might be messing it up:
我认为这行可能会搞砸:
G=nx.from_pandas_dataframe(df, 'BTDID', 'BDDID', ['PTDID', 'PBDID'])
but I'm not sure how to fix it. 但我不确定如何解决。 I got this ^ by following the example shown here: http://networkx.readthedocs.io/en/latest/reference/generated/networkx.convert_matrix.from_pandas_dataframe.html
我通过遵循此处显示的示例获得了此^: http : //networkx.readthedocs.io/en/latest/reference/produced/networkx.convert_matrix.from_pandas_dataframe.html
Thank you in advance! 先感谢您!
Nazar 纳扎尔
Edit: Traceback error: 编辑:回溯错误:
runfile('L:/Data/Global ID/Nazar/bdh.py', wdir='L:/Data/Global ID/Nazar') Traceback (most recent call last): runfile('L:/ Data / Global ID / Nazar / bdh.py',wdir ='L:/ Data / Global ID / Nazar')追溯(最近一次调用):
File "", line 1, in runfile('L:/Data/Global ID/Nazar/bdh.py', wdir='L:/Data/Global ID/Nazar') 文件“”,第1行,位于runfile('L:/ Data / Global ID / Nazar / bdh.py',wdir ='L:/ Data / Global ID / Nazar')
File "C:\\Users\\nkurdob\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\spyderlib\\widgets\\externalshell\\sitecustomize.py", line 714, in runfile execfile(filename, namespace) 运行文件execfile中的文件“ C:\\ Users \\ nkurdob \\ AppData \\ Local \\ Continuum \\ Anaconda2 \\ lib \\ site-packages \\ spyderlib \\ widgets \\ externalshell \\ sitecustomize.py”,行714(文件名,名称空间)
File "C:\\Users\\nkurdob\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\spyderlib\\widgets\\externalshell\\sitecustomize.py", line 74, in execfile exec(compile(scripttext, filename, 'exec'), glob, loc) 文件“ C:\\ Users \\ nkurdob \\ AppData \\ Local \\ Continuum \\ Anaconda2 \\ lib \\ site-packages \\ spyderlib \\ widgets \\ externalshell \\ sitecustomize.py”,第74行,位于execfile exec(compile(scripttext,filename,'exec' ),glob,loc)
File "L:/Data/Global ID/Nazar/bdh.py", line 32, in p=nx.single_source_shortest_path_length(G,ncenter) 文件“ L:/数据/全局ID / Nazar / bdh.py”,第32行,位于p = nx.single_source_shortest_path_length(G,ncenter)
File "C:\\Users\\nkurdob\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\networkx\\algorithms\\shortest_paths\\unweighted.py", line 63, in single_source_shortest_path_length nextlevel.update(G[v]) # add neighbors of v 文件“ 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])#添加v的邻居
File "C:\\Users\\nkurdob\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\networkx\\classes\\graph.py", line 407, in getitem return self.adj[n] 文件“ C:\\ Users \\ nkurdob \\ AppData \\ Local \\ Continuum \\ Anaconda2 \\ lib \\ site-packages \\ networkx \\ classes \\ graph.py”,第407行,在getitem中返回self.adj [n]
KeyError: 0 KeyError:0
It does not look like you have defined pos
as a node attribute. 看起来您没有将
pos
定义为节点属性。 So when you do pos = nx.get_node_attributes(G,'pos')
, it is made into an empty dict
. 因此,当您执行
pos = nx.get_node_attributes(G,'pos')
,它会变成一个空dict
。
Hence the loop for n in pos
does nothing. 因此
for n in pos
中for n in pos
的循环不执行任何操作。 So ncenter
is still 0 after the loop. 因此,循环后
ncenter
仍为0。 Since your graph doesn't have a node 0
, you're getting a keyerror when you ask it to find the paths from ncenter
. 由于您的图形没有节点
0
,因此当您要求它从ncenter
查找路径时, ncenter
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.