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

调用pyvis的from_nx加载networkx图时触发AssertionError报错

pyvis调用net.from_nx(G)抛出AssertionError的原因及修复方案

核心报错原因

这个断言错误是from_nx()方法内部的合法性校验未通过导致的,常见触发场景有三类:

  • 依赖版本不兼容:这是最高发的原因。NetworkX 3.0及以上版本调整了图对象内部节点、边的属性存储结构,0.3.1及更早版本的PyVis没有做适配,方法内部断言节点/边属性格式符合旧版规范时就会失败。
  • 源数据存在非法节点:用from_pandas_edgelist生成图时,如果desc.x、desc.y列存在空值(NaN/None),或者节点值是列表、字典这类不可哈希的可变类型,遍历节点做校验时会触发断言。
  • 边属性存在非法值:指定lift作为边属性时,如果该列存在空值、自定义对象、嵌套结构这类无法被JSON序列化的值,边属性校验环节会抛出断言错误。

排查修复步骤

  1. 先清洗源数据,过滤非法值
    执行以下代码检查数据问题,提前过滤脏数据:
# 统计关键字段空值数量
print(rules[["desc.x", "desc.y", "lift"]].isna().sum())
# 校验节点值类型合法性
print(rules["desc.x"].map(type).value_counts())
print(rules["desc.y"].map(type).value_counts())
# 校验lift列是否为合法数值
print(pd.to_numeric(rules["lift"], errors="coerce").isna().sum())

# 过滤掉存在空值的行
rules = rules.dropna(subset=["desc.x", "desc.y", "lift"])
  1. 修复依赖版本兼容问题
    如果数据校验没有问题,优先选择升级PyVis到适配NetworkX 3.x的最新版本;如果升级后仍有兼容问题,可以将NetworkX降级到2.6.3的稳定兼容版本,对应执行命令:
# 升级PyVis
pip install --upgrade pyvis

# 备选:降级NetworkX到兼容版本
pip install networkx==2.6.3
  1. 手动补全节点/边属性绕过校验
    如果不想调整依赖版本,可以在传入PyVis前手动给所有节点、边补全PyVis要求的默认属性,直接绕过断言校验:
G = nx.from_pandas_edgelist(rules, source = "desc.x", target = "desc.y", edge_attr = "lift")
# 补全节点必填属性
for n in G.nodes:
    G.nodes[n]["title"] = str(n)
    G.nodes[n]["size"] = 10
# 补全边必填属性
for e in G.edges:
    edge_lift = G.edges[e]["lift"]
    G.edges[e]["title"] = f"关联强度lift: {edge_lift}"

net = Network(notebook = True, width=1000, height=600)
net.from_nx(G)

内容的提问来源于stack exchange,提问作者Ricardo Muñoz romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:30:53