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

Power BI中使用NetworkX绘制网络图的三类技术问题

Power BI中NetworkX使用问题的解决方案

问题1:移除空白节点

空白节点的出现源于数据中空的目标节点,之前用math.isnan()失效是因为空值可能是字符串空值而非数值NaN,改用pandas.isna()可覆盖所有空值类型,提供两种处理方式:

  1. 创建图前清理数据:直接删除包含空目标节点的行
import pandas as pd

# 移除目标节点为空的行
dataset = dataset.dropna(subset=["NodeName.1"])

# 基于清理后的数据创建图
G = nx.from_pandas_edgelist(dataset, source="NodeName", target="NodeName.1")
  1. 创建图后移除空节点:遍历图节点,筛选并移除所有空值节点
import pandas as pd
import networkx as nx

G = nx.from_pandas_edgelist(dataset, source="NodeName", target="NodeName.1")
# 筛选所有空值节点
null_nodes = [node for node in G.nodes() if pd.isna(node)]
# 批量移除空节点
G.remove_nodes_from(null_nodes)

问题2:绘制有向图

要生成有向图,需在创建图时指定create_using=nx.DiGraph(),箭头样式是绘图阶段的参数,而非创建图的参数,之前的错误是参数位置放错。

正确代码:

import networkx as nx
import matplotlib.pyplot as plt

# 创建有向图对象
G = nx.from_pandas_edgelist(dataset, source="NodeName", target="NodeName.1", create_using=nx.DiGraph())

# 绘制带箭头的有向图,设置箭头样式和大小
nx.draw_networkx(G, with_labels=True, arrows=True, arrowstyle='->', arrowsize=15)
plt.show()

问题3:筛选后显示完整上下游路径

要显示筛选节点的完整上下游路径,需提取包含该节点所有可达节点(上游祖先+下游后代)的子图,具体实现:

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 创建有向图
G = nx.from_pandas_edgelist(dataset, source="NodeName", target="NodeName.1", create_using=nx.DiGraph())

# 提取当前筛选后的所有有效节点(合并源/目标节点,去重去空)
filtered_nodes = pd.concat([dataset["NodeName"], dataset["NodeName.1"]]).dropna().unique()

# 定义函数,获取节点的所有上下游可达节点
def get_full_path_nodes(graph, start_nodes):
    full_nodes = set()
    for node in start_nodes:
        full_nodes.add(node)
        # 添加所有下游节点
        full_nodes.update(nx.descendants(graph, node))
        # 添加所有上游节点
        full_nodes.update(nx.ancestors(graph, node))
    return list(full_nodes)

# 获取完整路径的节点集合
path_nodes = get_full_path_nodes(G, filtered_nodes)

# 提取子图
sub_graph = G.subgraph(path_nodes)

# 绘制子图
nx.draw_networkx(sub_graph, with_labels=True, arrows=True, arrowstyle='->', arrowsize=15)
plt.show()

原理:通过nx.descendants()和nx.ancestors()分别获取节点的下游、上游节点,将这些节点组合成子图,即可显示完整的上下游路径,同时自动排除无关节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:33