Python 如何从数据帧行生成networkx边

Python 如何从数据帧行生成networkx边,python,pandas,dataframe,graph,networkx,Python,Pandas,Dataframe,Graph,Networkx,上下文: 我正在为一个蛋白质-蛋白质相互作用网络制作一个可视化图形。这里的一个节点对应于一个蛋白质,一个边缘表示两个节点之间的相互作用 这是我的密码: 首先,我导入我需要的所有模块和文件: import networkx as nx import matplotlib.pyplot as plt import pandas as pd interactome_edges = pd.read_csv("*a_directory*", delimiter = "\t&

上下文: 我正在为一个蛋白质-蛋白质相互作用网络制作一个可视化图形。这里的一个节点对应于一个蛋白质,一个边缘表示两个节点之间的相互作用

这是我的密码:

首先,我导入我需要的所有模块和文件:

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd

interactome_edges = pd.read_csv("*a_directory*", delimiter = "\t", header = None)
interactome_nodes = pd.read_csv("*a_directory*", delimiter = "\t", header = None)

# A few adjustments for the dataframes
interactome_nodes = interactome_nodes.drop(columns = [0])
interactome_edges.columns = ["node1","node2"]

节点的数据帧如下所示:

    1
0   MET3
1   IMD3
2   OLE1
3   MUP1
4   PIS1
...
node1   node2
0   MET3    MET3
1   IMD3    IMD4
2   OLE1    OLE1
3   MUP1    MUP1
4   PIS1    PIS1
...
边缘的数据框如下所示:

    1
0   MET3
1   IMD3
2   OLE1
3   MUP1
4   PIS1
...
node1   node2
0   MET3    MET3
1   IMD3    IMD4
2   OLE1    OLE1
3   MUP1    MUP1
4   PIS1    PIS1
...
基本上,边从节点1延伸到节点2

现在,我遍历节点数据帧和边缘数据帧中的每一行,并将其用作networkx节点和边缘

interactome = nx.Graph()

# Adding Nodes to Graph
for index, row in interactome_nodes.iterrows():
    interactome.add_nodes_from(row)

# Adding Edges to Graph
for index, row in interactome_edges.iterrows():
    interactome.add_edges_from(row["node1", "node2"]) #### Here is the problem
我的问题是在添加边部分。 我当前收到以下错误:

KeyError: ('node1', 'node2')
我也尝试过:

for index, row in interactome_edges.iterrows():
    interactome.add_edges_from((row["node1"],row["node2"]))
以及:

而且很简单:

for index, row in interactome_edges.iterrows():
    interactome.add_edges_from(row)
所有这些都给了我一些错误的理由

如何将节点到节点的数据帧用作networkx图形的边

In [9]: import networkx as nx

In [10]: import pandas as pd

In [11]: df = pd.read_csv("a.csv")

In [12]: df
Out[12]:
  node1 node2
0  MET3  MET3
1  IMD3  IMD4
2  OLE1  OLE1
3  MUP1  MUP1
4  PIS1  PIS1

In [13]: G=nx.from_pandas_edgelist(df, "node1", "node2")

In [14]: [e for e in G.edges]
Out[14]:
[('MET3', 'MET3'),
 ('IMD3', 'IMD4'),
 ('OLE1', 'OLE1'),
 ('MUP1', 'MUP1'),
 ('PIS1', 'PIS1')]
Networkx具有从数据帧读取的方法。我使用了提供的edge数据框。在这里,我使用
from\u pandas\u edgelist
方法来读取edges的数据帧

绘制完图形后

nx.draw_planar(G, with_labels = True) 
plt.savefig("filename2.png") 

Networkx具有从数据帧读取的方法。我使用了提供的edge数据框。在这里,我使用
from\u pandas\u edgelist
方法来读取edges的数据帧

绘制完图形后

nx.draw_planar(G, with_labels = True) 
plt.savefig("filename2.png")