2017-06-20 47 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中提供。 再次感謝。 –