Python NetworkX/Pandas-can';t将节点的度数输出到.txt文件中(错误消息)

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(

我需要将网络节点的度(以及其他中心度指标)输出到一个.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(
    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.x
nx.degree(G)中的事实有关
返回所谓的“DegreeView”对象,该对象类似于dict。您需要使用什么格式的
DEGREE
?您是正确的,问题出在DEGREE行中。度应该是数字(整数),就像添加到原始的示例中一样post@joel关于从nx.degree方法返回的v2.x networkx数据类型更改的精彩捕捉。