将 Networkx 图转换为具有其属性的数据框
Converting Networkx graph to data frame with its attributes
我有两个图表,g1 和 g2。我已经应用了一些规则并将它们映射如下所示。
图表:
我想将映射图转换回 pandas 数据框 /table/。
From Attribute To
10/10 Start 130/21
130/21 Left 190/190
190/190 Right 240/204
240/204 End -
在PythonPandas中有什么方法可以做到这一点吗?
def make_node_df(G):
nodes = {}
for node, attribute in G.nodes(data=True):
if not nodes.get('node'):
nodes['node'] = [node]
else:
nodes['node'].append(node)
for key, value in attribute.items():
if not nodes.get(key):
nodes[key] = [value]
else:
nodes[key].append(value)
return pd.DataFrame(nodes)
def make_edge_df(G):
edges = {}
for source, target, attribute in G.edges(data=True):
if not edges.get('source'):
edges['source'] = [source]
else:
edges['source'].append(source)
if not edges.get('target'):
edges['target'] = [target]
else:
edges['target'].append(target)
for key, value in attribute.items():
if not edges.get(key):
edges[key] = [value]
else:
edges[key].append(value)
return pd.DataFrame(edges)
def node_df_to_ebunch(df, nodename='node'):
attributes = [col for col in df.columns if not col==nodename]
ebunch = []
for ix, row in df.iterrows():
ebunch.append((row[nodename], {attribute:row[attribute] for attribute in attributes}))
return ebunch
因此,您可以使用 make_node_df 将图的节点转换为数据框,使用 make_edge_df 将边转换为数据框。
如果你想从一个数据框转到一个图,你可以使用内置函数 nx.from_pandas_edgelist 和边数据框,对于节点,你可以这样做:
G = nx.Graph()
nodes = node_df_to_ebunch(df, nodename='node')
G.add_nodes_from(nodes)
我有两个图表,g1 和 g2。我已经应用了一些规则并将它们映射如下所示。
图表:
我想将映射图转换回 pandas 数据框 /table/。
From Attribute To
10/10 Start 130/21
130/21 Left 190/190
190/190 Right 240/204
240/204 End -
在PythonPandas中有什么方法可以做到这一点吗?
def make_node_df(G):
nodes = {}
for node, attribute in G.nodes(data=True):
if not nodes.get('node'):
nodes['node'] = [node]
else:
nodes['node'].append(node)
for key, value in attribute.items():
if not nodes.get(key):
nodes[key] = [value]
else:
nodes[key].append(value)
return pd.DataFrame(nodes)
def make_edge_df(G):
edges = {}
for source, target, attribute in G.edges(data=True):
if not edges.get('source'):
edges['source'] = [source]
else:
edges['source'].append(source)
if not edges.get('target'):
edges['target'] = [target]
else:
edges['target'].append(target)
for key, value in attribute.items():
if not edges.get(key):
edges[key] = [value]
else:
edges[key].append(value)
return pd.DataFrame(edges)
def node_df_to_ebunch(df, nodename='node'):
attributes = [col for col in df.columns if not col==nodename]
ebunch = []
for ix, row in df.iterrows():
ebunch.append((row[nodename], {attribute:row[attribute] for attribute in attributes}))
return ebunch
因此,您可以使用 make_node_df 将图的节点转换为数据框,使用 make_edge_df 将边转换为数据框。
如果你想从一个数据框转到一个图,你可以使用内置函数 nx.from_pandas_edgelist 和边数据框,对于节点,你可以这样做:
G = nx.Graph()
nodes = node_df_to_ebunch(df, nodename='node')
G.add_nodes_from(nodes)