networkx创建图时边数据格式选list最稳妥;若来自dataframe,需转为list元组序列,含权重时须显式构造三元组;中心性结果为0常因图不连通,应检查连通性并提取最大连通子图。

NetworkX 创建图时,边数据格式选 list 还是 pd.DataFrame?
直接用 nx.Graph() + add_edges_from() 最稳妥。如果边来自 Pandas DataFrame,别直接传 df.values,容易把整行当一个元组;正确做法是先转成 list 元组序列:
edges = list(df[['source', 'target']].itertuples(index=False, name=None))。DataFrame 里含权重列时,也得显式构造三元组:
(u, v, {'weight': w}),否则 add_weighted_edges_from() 会报 ValueError: Edge tuple <...> must be 3-tuple.</...>。
计算度中心性、接近中心性和中介中心性,为什么结果全是 0.0?
常见原因是图不连通——nx.closeness_centrality() 和 nx.betweenness_centrality() 默认只对**强连通分量**内节点计算,孤立节点或跨连通分量的路径不存在,就返回 0。解决办法:对无向图,加参数 distance='weight' 前先确认边有权重;更关键的是,用 nx.is_connected(G) 检查,若为 False,应先取最大连通子图:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
G_main = max(nx.connected_components(G), key=len)<br>G_sub = G.subgraph(G_main).copy()。另外,
nx.betweenness_centrality() 对大图(>1k 节点)默认不归一化,要加 normalized=True 才方便横向比较。
nx.pagerank() 返回值和节点顺序对不上,怎么对齐?
nx.pagerank() 返回的是 dict,键是节点 ID(可能是 int、str 或 tuple),不保证顺序。若你用 list(G.nodes()) 构造索引数组,必须确保节点 ID 类型一致——比如 CSV 读入的 ID 默认是字符串,但图中节点被误建为 int,查 pagerank_dict.get(123) 就返回 None。建议统一用 str:
G.add_edge(str(row['src']), str(row['dst']))。导出结果时,用
sorted(pagerank_dict.items()) 或按原始节点列表排序:nodes = list(G.nodes())<br>pr_vals = [pagerank_dict[n] for n in nodes]。
中文节点名导致绘图乱码或布局错乱,怎么处理?
NetworkX 本身不渲染文字,乱码实际来自 Matplotlib。需在绘图前设置字体:
import matplotlib.pyplot as plt<br>plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']<br>plt.rcParams['axes.unicode_minus'] = False。但更隐蔽的问题是:中文节点名作为 dict 键时,若混用全角/半角空格或不可见字符(如从 Excel 复制),
G.has_node('张三') 可能返回 False。建议清洗节点名:clean_name = lambda s: str(s).strip().replace(' ', ' ').replace('\u200b', ''),并在添加节点前调用。另外,中文名过长会导致 nx.spring_layout() 收敛慢,可先用 scale=2.0 加大画布,或换 nx.kamada_kawai_layout() 提升稳定性。
NetworkX 的中心度函数本身很可靠,真正卡住人的往往是数据预处理那几步——节点类型不一致、图不连通、中文编码残留、权重字段没对齐。这些地方多打两次 print(list(G.nodes())[:5]) 和 print(nx.info(G)),比查文档更快定位问题。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










