尝试使用 numpy 作为解决方法。
G = nx.from_numpy_matrix(df.values, parallel_edges=True,
create_using=nx.MultiDiGraph())
# Because we use numpy, labels need to be reset
label_mapping = {0: "A", 1: "B", 2: "C", 3: "D"}
G = nx.relabel_nodes(G, label_mapping)
G.edges(data=True)
OutMultiEdgeDataView([('A', 'B', {'weight': 0.5}),
('A', 'C', {'weight': 0.5}),
('B', 'A', {'weight': 1.0}),
('C', 'A', {'weight': 0.8}),
('C', 'D', {'weight': 0.2}),
('D', 'C', {'weight': 1.0})])
在更一般的情况下,要得到label_mapping
您可以使用
label_mapping = {idx: val for idx, val in enumerate(df.columns)}
这似乎是一个错误networkx 2.0
。他们将在 2.1 中修复它。看到这个issue https://github.com/networkx/networkx/issues/2828#issuecomment-358157844了解更多信息。