Python NetworkX 将熊猫的整数转换为浮点数



我正在尝试从熊猫数据帧构建 networkx 图,在绘制时为节点使用位置数组。我遇到的问题是将熊猫列作为边缘属性包含在内时。如果属性列的类型为 float,它会将节点 id (int( 的值转换为 float 类型,这会导致 networkx 绘制函数的位置数组内的索引出现问题。

这可以通过在 节点和边缘被创建,但我觉得应该有一种方法可以工作,所以我错过了一些明显的东西。

感谢您的帮助。

import networkx as nx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#set up datae frame
UpNodes  =np.array([0,0,1,1,2,2,6,6,8,8,10], dtype=np.int)
DownNodes=np.array([1,2,3,4,4,5,7,8,9,10,11], dtype=np.int)
ORDER    =np.array([2,1,1,1,3,2,1,1,1,2,3],dtype=np.float) #toggle this from int to float
df=pd.DataFrame(
{'UpNodes': UpNodes,
'DownNodes':DownNodes,
'ORDER': ORDER},
columns=['UpNodes','DownNodes','ORDER'])
#create array of spatial positions for nodes
pos=np.array(
[[ 0., 0.  ],
[ 1., 0.5 ],
[ 1., -0.5 ],
[ 2., 1.  ],
[ 2., 0.25],
[ 2., -1.  ],
[ 3., 2.  ],
[ 4., 3.  ],
[ 4., 1.  ],
[ 5., 2.  ],
[ 5., 0.  ],
[ 6., 0.  ]]
)
plt.figure('Im a plot')
print df
print df.dtypes
G=nx.from_pandas_edgelist(df,'UpNodes','DownNodes','ORDER')
print G.edges
nx.draw(G, pos, node_size=90, with_labels=False)
print 'Done'
plt.show()

好的,是的,阅读文档真的很有帮助,因为这个问题就在那里。 对于其他想要解决这个问题的人,你可以编写自己的文章来使用迭代而不是迭代,这不会节省 dtype。

def pandas_to_Network(df,UpNode,DownNode,Attributes):
#Create a graph
G=nx.Graph()
#Loop through the pandas dataframe and add edges
for row in df.itertuples():
#convert edge attributes to dictionary form
edgedata={}
for edge_key in Attributes:
edgedata.update({edge_key:getattr(row,edge_key)})
#create edge
G.add_edge(getattr(row,UpNode), getattr(row,DownNode),**edgedata)
return G

其中属性是列标题列表(在我的例子中只是 ['ORDER'](

最新更新