如何使用 2.0 之前的 networkx 版本从 pandas 数据帧中读取

how to read from pandas dataframe with networkx versions before 2.0

我需要从 pandas 数据帧生成一个带有 arc 属性的 networkx 图。在 networkx 2.0 版中,我知道 from_pandas_dataframe 函数,我做了我想要的,如下所示:

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

但是目前我必须使用没有from_pandas_dataframe功能的networkx 1.9.。我想知道我该怎么做。任何帮助将不胜感激。

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

使用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) shows from_pandas_dataframe is fairly simple and depends only on one helper function, _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.