You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从列值为邻接节点元组的Pandas DataFrame构建NetworkX图

解决方案

核心逻辑:nx.from_pandas_edgelist要求每行对应一条边的两个独立节点,所以只需要提前把存储邻接节点列表/元组的列拆分为多行,每个邻接节点单独占一行即可,pandas内置的explode方法可以一步完成这个操作。

方法1:explode转换后直接调用接口(推荐,代码最简洁)

import networkx as nx
import pandas as pd

data = [[1,(2,4)],[2, (1,3)], [3, (1,2,3)], [4, (1)]]
exdf = pd.DataFrame(data, columns = ["A","B"])

# 先统一处理B列的单个值(避免形如(1)被识别为int而非元组的情况)
exdf['B'] = exdf['B'].apply(lambda x: (x,) if isinstance(x, (int, str)) else x)
# 炸开B列,每个邻接节点单独占一行
exdf_exploded = exdf.explode('B')
# 正常构建图
G = nx.from_pandas_edgelist(exdf_exploded, source="A", target="B")

# 验证结果
print(G.edges())
# 输出:[(1, 2), (1, 4), (1, 3), (2, 3), (3, 3)]

适用条件:pandas 0.25及以上版本支持explode方法,绝大多数运行环境都满足要求。

方法2:遍历行加边(兼容性更好)

如果使用的pandas版本过低不支持explode,可以直接遍历每行手动加边,逻辑也很清晰:

G = nx.Graph()
for _, row in exdf.iterrows():
    source_node = row['A']
    target_nodes = row['B']
    # 统一转为元组处理单个值的情况
    if not isinstance(target_nodes, (tuple, list)):
        target_nodes = (target_nodes,)
    # 批量加边
    G.add_edges_from((source_node, t) for t in target_nodes)

内容的提问来源于stack exchange,提问作者winawer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:12:00