基于pandas DataFrame创建带配色的节点关联网络
代码问题定位与正确实现方案
你原代码的逻辑和输入数据结构完全不匹配,是导致输出和预期不符的核心原因:原代码是围绕DataFrame的列分组,基于行索引生成边,但你的输入是「每个主字符串对应一个关联节点列表」的键值结构,和代码假设的数据结构完全脱节,自然无法生成正确网络。
第一步:将原始输入结构转换为可处理的字典
先把你给出的邻接关系整理为标准Python字典,避免硬编码结构混乱:
adjacency_map = { "string1": ["string3", "string2", "string20", "string4"], "string2": ["string100", "string1", "string4"], "string3": ["string1", "string80", "string2"], "string4": ["string13", "string28", "string12", "string16"], "string5": ["string3", "string8", "string12", "string6"], "string6": [] }
第二步:按照连接规则生成图
严格遵循要求的连接逻辑:每个关联列表内的所有节点两两建立无向连接,无需将列表对应的主节点强行加入列表参与连边。
正确实现代码如下:
import networkx as nx from itertools import combinations edges = set() # 用集合存储边自动去重 all_nodes = set() for main_node, neighbor_list in adjacency_map.items(): # 收集全量节点(包含主节点、列表内关联节点) all_nodes.add(main_node) all_nodes.update(neighbor_list) # 仅当列表内节点数≥2时,才有组合生成边的可能 if len(neighbor_list) >= 2: for edge_pair in combinations(neighbor_list, 2): # 对边元组排序,保证无向图下重复边(如(a,b)和(b,a))被去重 sorted_edge = tuple(sorted(edge_pair)) edges.add(sorted_edge) # 初始化NetworkX图 G = nx.Graph() G.add_nodes_from(all_nodes) G.add_edges_from(edges)
易踩的细节坑
- 导入写法错误:
import itertools.combinations as comb是Python不支持的无效导入,必须从itertools模块导入combinations对象 - 连边范围错误:不要把主节点混入对应关联列表生成边,否则会生成大量不符合规则的额外边
- 去重逻辑缺失:无向图存储边时如果不对元组排序,会把顺序相反的同一对节点判定为两条独立边,导致边重复
- 空列表处理:空的关联列表(如string6)不需要生成边,只需将节点本身加入图即可
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

