2017-06-20 48 views
1

我需要生成一个来自熊猫数据帧的带弧属性的networkx图。在networkx 2.0版,我知道了from_pandas_dataframe功能的,我做我想要的东西如下:如何从2.0之前的networkx版本读取熊猫数据帧

graph=nx.from_pandas_dataframe(df_t, 'node2', 'node1', ['Transit Time','arctype','node1type','node2type','cpt'],nx.DiGraph()) 

但是在现阶段,我不得不使用networkx 1.9,不具有from_pandas_dataframe功能。我想知道我该如何做到这一点。任何帮助将不胜感激。

P.S.我在一个只有networkx v1.9的框架中部署我的应用程序。我没有时间在框架中升级networkx版本,所以我正在尝试更改自己的代码。

回答

2

使用IPython,你可以找到它定义nx.from_pandas_dataframe文件:

In [125]: import networkx as nx 
In [126]: nx.from_pandas_dataframe? 
... 
File:  ~/.virtualenvs/muffy/lib/python3.4/site-packages/networkx/convert_matrix.py 

检查该文件(或source on github)显示from_pandas_dataframe相当简单,只取决于一个辅助函数,_prep_create_using

所以,你可以创建一个文件utils_networkx.py并插入那里的 _prep_create_usingfrom_pandas_dataframe的定义。请确保将utils_networkx.py放置在您的PYTHONPATH环境变量中列出的目录中,以便Python可以将其作为模块导入。

然后,你可以使用这样的:

import numpy as np 
import pandas as pd 
import networkx as nx 
import utils_networkx as UNX 

r = np.random.RandomState(seed=5) 
ints = r.randint(1, 10, size=(3,2)) 
a = ['A', 'B', 'C'] 
b = ['D', 'A', 'E'] 
df = pd.DataFrame(ints, columns=['weight', 'cost']) 
df[0] = a 
df['b'] = b 
print(df) 
# weight cost 0 b 
# 0  4  7 A D 
# 1  7  1 B A 
# 2  10  9 C E 
G = UNX.from_pandas_dataframe(df, 0, 'b', ['weight', 'cost']) 
print(G['E']['C']['weight']) 
# 10 
print(G['E']['C']['cost']) 
# 9 

上面的代码来自from_pandas_dataframe docstring

+0

感谢您的回复。在您领导之后,我将from_pandas_dataframe的源代码与_prep_create_using一起复制到脚本中。源代码在http://networkx.readthedocs.io/en/latest/_modules/networkx/convert_matrix.html#from_pandas_dataframe中提供。 再次感谢。 –