如何使用NetworkX从Pandas DataFrame创建带边属性的有向多重图?
NetworkX 创建带属性的有向多重图方法
先修正图类型:你需要的是有向多重图,所以
create_using参数要传入nx.MultiDiGraph(),而不是无向的nx.MultiGraph。基于DataFrame直接创建带属性的图:
确保你的DataFrame包含所有要作为边属性的列(比如发送日期、接收日期、信件内容等),然后修改from_pandas_edgelist的调用方式,把所有目标属性列名放进edge_attr列表:G1 = nx.from_pandas_edgelist( df, source="letter_sent", # 替换为你的发件人列名 target="letter_recd", # 替换为你的收件人列名 edge_attr=["send_date", "recv_date", "content"], # 替换为实际要作为属性的列名 create_using=nx.MultiDiGraph() )如果你原本的
letter_sent_recd是属性列,直接把它加入edge_attr列表即可。正确查看边属性:
直接打印G1.edges只会显示(源节点, 目标节点, 边key)格式的元组,要查看属性需要用edges(data=True):# 遍历所有边并打印属性 for u, v, key, attrs in G1.edges(keys=True, data=True): print(f"发件人 {u} -> 收件人 {v} (边标识: {key}): 属性 {attrs}")也可以单独获取某条边的指定属性:
# 假设已知边的源、目标和key content = G1.edges["某发件人", "某收件人", 0]["content"]后续手动添加边属性:
如果需要在创建图后补充属性,可通过遍历边赋值:for u, v, key in G1.edges(keys=True): # 示例:给每条边添加信件数量属性 G1.edges[u, v, key]["letter_count"] = 1
内容的提问来源于stack exchange,提问作者user2626174
相关产品推荐
相关产品推荐

