Python3.6+NetworkX2.1:bipartite.biadjacency_matrix节点名称恢复咨询
解决二分图邻接矩阵转DataFrame丢失节点名称的问题
这问题我之前也碰到过!其实解决起来很简单——关键是利用你传给biadjacency_matrix的nodes1和nodes2节点列表,直接给生成的DataFrame指定行和列的索引就行,因为矩阵的行/列顺序和你传入的节点列表顺序是完全对应的。
具体步骤和修改后的代码:
- 确认节点顺序一致性:调用
bipartite.biadjacency_matrix(G, nodes1, nodes2)时,生成的矩阵行对应nodes1里的节点,列对应nodes2里的节点,顺序和列表完全匹配。 - 创建DataFrame时指定索引:在转换为DataFrame的同时,把
nodes1设为行索引,nodes2设为列索引,这样就保留了原始节点名称,替代默认的数字索引。
修改后的代码如下:
import pandas as pd from networkx import bipartite # 假设你已经通过二分图获取或定义了nodes1和nodes2节点列表 A = bipartite.biadjacency_matrix(G, nodes1, nodes2).todense() # 关键:指定index和columns参数 A_df = pd.DataFrame(A, index=nodes1, columns=nodes2)
额外提示:
如果你的nodes1和nodes2是通过bipartite.sets(G)获取的,注意集合是无序的,建议转换成列表并排序来固定顺序,避免后续索引错位:
# 获取二分图两边节点并固定顺序 nodes1, nodes2 = bipartite.sets(G) nodes1 = sorted(nodes1) nodes2 = sorted(nodes2)
这样处理后,你的DataFrame就会清晰显示节点名称,后续计算相关系数(比如A_df.corr())得到的相似度矩阵,行和列也会保留对应的节点名称,之后构建网络时直接用这些索引就能准确对应到原始节点啦。
内容的提问来源于stack exchange,提问作者sato
相关产品推荐
相关产品推荐

