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

使用Pyvis和Pandas创建网络图边时的异常问题排查

问题分析与解决方案

问题根源

你的代码中df.dropna(subset=['mainartist', 'artistrel', 'artistlu'])这一行会过滤掉所有mainartist为空的行——由于你的mainartist列仅第一行有数据,其他行都是空值,过滤后DataFrame只剩下第一行数据,导致后续循环只能执行一次,自然无法批量生成边。

修改后的代码

from pyvis.network import Network
import pandas as pd

net = Network()

file_loc = "/Users/jamiekonincks/Documents/programmeren/Data/network_chart/art_templ1.xlsx"
df = pd.read_excel(file_loc, usecols=["mainartist", "artistrel", "artistlu"])

# 提取唯一的主艺术家(确保非空)
mainartist = df['mainartist'].dropna().iloc[0]
# 添加主艺术家节点
net.add_node(mainartist, label=mainartist, color='#3da831', size=20)

# 仅过滤掉artistrel或artistlu为空的行,保留所有有效关联艺术家行
filtered_df = df.dropna(subset=['artistrel', 'artistlu'])

# 记录已添加的节点,避免重复添加
added_nodes = {mainartist}

# 遍历所有关联艺术家行
for _, row in filtered_df.iterrows():
    artistrel = row['artistrel']
    artistlu = row['artistlu']
    
    # 添加artistrel节点(如果未添加过)
    if artistrel not in added_nodes:
        net.add_node(artistrel, label=artistrel, color='#9a31a8', size=20)
        added_nodes.add(artistrel)
    # 添加artistlu节点(如果未添加过)
    if artistlu not in added_nodes:
        net.add_node(artistlu, label=artistlu, color='#9a31a8', size=20)
        added_nodes.add(artistlu)
    
    # 添加主艺术家与两个关联艺术家的边
    net.add_edge(mainartist, artistrel, width=2)
    net.add_edge(mainartist, artistlu, width=2)

# 可视化设置
net.toggle_physics(False)
net.barnes_hut()
net.show_buttons(filter_=['physics'])

net.show('list_of_nodes_with_color.html')

关键修改说明

  1. 调整数据过滤逻辑:不再过滤mainartist为空的行,仅保留artistrel和artistlu非空的行,确保所有关联艺术家数据都能被遍历。
  2. 提取主艺术家:单独提取mainartist列中非空的第一个值,保证后续使用的主艺术家有效。
  3. 避免重复节点:用集合added_nodes记录已添加的节点,防止同一艺术家被重复添加(Pyvis允许重复添加节点,但会导致冗余,此优化可提升效率)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:50