Python NetworkX/Pandas-can';t将节点的度数输出到.txt文件中(错误消息)
我需要将网络节点的度(以及其他中心度指标)输出到一个.txt文件中。在以前的NetworkX/Pandas版本中,我能够做到这一点,但现在我遇到了一个错误 我正在使用NetworkX版本。2.1和1。0.23.4:Python NetworkX/Pandas-can';t将节点的度数输出到.txt文件中(错误消息),python,pandas,networkx,Python,Pandas,Networkx,我需要将网络节点的度(以及其他中心度指标)输出到一个.txt文件中。在以前的NetworkX/Pandas版本中,我能够做到这一点,但现在我遇到了一个错误 我正在使用NetworkX版本。2.1和1。0.23.4: import pandas as pd import networkx as nx G = nx.Graph() G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6)]) df = pd.DataFrame(dict(
import pandas as pd
import networkx as nx
G = nx.Graph()
G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6)])
df = pd.DataFrame(dict(
DEGREE = nx.degree(G),
DEGREE_CENTRALITY = nx.degree_centrality(G),
EIGENVECTOR = nx.eigenvector_centrality(G),
KATZ = nx.katz_centrality_numpy(G),
CLOSENESS_CENTRALITY = nx.closeness_centrality(G),
BETWEENNESS_CENTRALITY = nx.betweenness_centrality(G),
CLUSTCOEF = nx.clustering(G),
))
#df.index += 1
#df.to_csv('centrality-metrics.csv')
错误消息是:
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
File "/home/arthur/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 348, in __init__
mgr = self._init_dict(data, index, columns, dtype=dtype)
File "/home/arthur/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 459, in _init_dict
return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
File "/home/arthur/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 7356, in _arrays_to_mgr
index = extract_index(arrays)
File "/home/arthur/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 7405, in extract_index
raise ValueError('Mixing dicts with non-Series may lead to '
ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.
好的,在阅读了上面的评论(@Joel)并做了一个测试之后,我们可以使用
dict(G.degree)
而不是nx.degree
:
import networkx as nx
G = nx.Graph()
G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6)])
df = pd.DataFrame(dict(
DEGREE = dict(G.degree),
DEGREE_CENTRALITY = nx.degree_centrality(G),
EIGENVECTOR = nx.eigenvector_centrality(G),
KATZ = nx.katz_centrality_numpy(G),
CLOSENESS_CENTRALITY = nx.closeness_centrality(G),
BETWEENNESS_CENTRALITY = nx.betweenness_centrality(G),
CLUSTCOEF = nx.clustering(G),
))
输出:
DEGREE DEGREE_CENTRALITY EIGENVECTOR KATZ CLOSENESS_CENTRALITY BETWEENNESS_CENTRALITY CLUSTCOEF
1 2 0.4 0.456984 0.408764 0.500000 0.0 1.000000
2 2 0.4 0.456984 0.408764 0.500000 0.0 1.000000
3 3 0.6 0.584217 0.448883 0.714286 0.6 0.333333
4 3 0.6 0.417120 0.441314 0.714286 0.7 0.000000
5 1 0.2 0.183076 0.367131 0.454545 0.0 0.000000
6 1 0.2 0.183076 0.367131 0.454545 0.0 0.000000
好的,在阅读了上面的评论(@Joel)并做了一个测试之后,我们可以使用
dict(G.degree)
而不是nx.degree
:
import networkx as nx
G = nx.Graph()
G.add_edges_from([(1,2),(1,3),(2,3),(3,4),(4,5),(4,6)])
df = pd.DataFrame(dict(
DEGREE = dict(G.degree),
DEGREE_CENTRALITY = nx.degree_centrality(G),
EIGENVECTOR = nx.eigenvector_centrality(G),
KATZ = nx.katz_centrality_numpy(G),
CLOSENESS_CENTRALITY = nx.closeness_centrality(G),
BETWEENNESS_CENTRALITY = nx.betweenness_centrality(G),
CLUSTCOEF = nx.clustering(G),
))
输出:
DEGREE DEGREE_CENTRALITY EIGENVECTOR KATZ CLOSENESS_CENTRALITY BETWEENNESS_CENTRALITY CLUSTCOEF
1 2 0.4 0.456984 0.408764 0.500000 0.0 1.000000
2 2 0.4 0.456984 0.408764 0.500000 0.0 1.000000
3 3 0.6 0.584217 0.448883 0.714286 0.6 0.333333
4 3 0.6 0.417120 0.441314 0.714286 0.7 0.000000
5 1 0.2 0.183076 0.367131 0.454545 0.0 0.000000
6 1 0.2 0.183076 0.367131 0.454545 0.0 0.000000
我能够用python 3.7.0、pandas 0.23.4和networkx 2.1重现这一点,这可能与networkx v2.x
nx.degree(G)
返回所谓的“DegreeView”对象有关,该对象类似于dict。您需要degree
的格式是什么?没错,问题在degree行。度应该是数字(整数),就像添加到原始的示例中一样post@joel关于从nx.degree方法返回的数据类型在v2.x networkx中的变化,这是一个很好的捕捉。我能够用python 3.7.0、pandas 0.23.4、networkx 2.1重现这一点。这可能与networkx v2.xnx.degree(G)中的事实有关
返回所谓的“DegreeView”对象,该对象类似于dict。您需要使用什么格式的DEGREE
?您是正确的,问题出在DEGREE行中。度应该是数字(整数),就像添加到原始的示例中一样post@joel关于从nx.degree方法返回的v2.x networkx数据类型更改的精彩捕捉。