简体   繁体   English

使用Pandas数据框使用networkx / plotly创建网络-KeyError:0

[英]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,'e​​xec' ),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 posfor 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM