如何使用 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_using
和 from_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
我需要从 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_using
和 from_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