Pandas Dataframe & NetworkX - NetworkXError: random_state_index is incorrect - linked to my previous question

Pandas Dataframe & NetworkX - NetworkXError: random_state_index is incorrect - linked to my previous question

这是我之前问题的link:

事实是,通过 networkx MultiDiGraph 构建,我想对上述问题中的数据帧执行的操作会容易得多。

但我已经尝试使用 networkx,但无法使用它,因为我在尝试绘制图形时总是出现此错误:

df_ = pd.DataFrame({
    'key' : ['E', 'E', 'E', 'E', 'K', 'K', 'K', 'K', 'K'],
    'father' : ['A', 'D', 'C', 'B', 'F', 'G', 'H', 'I', 'J'],
    'son' : ['B', 'E', 'D', 'C', 'G', 'H', 'I', 'J', 'K']
})
df_

G = nx.from_pandas_edgelist(df_, source='father', target='son',
                            create_using=nx.MultiDiGraph)
nx.draw(G)

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
~\Anaconda3\lib\site-packages\networkx\utils\decorators.py in _random_state(func, *args, **kwargs)
    395         try:
--> 396             random_state_arg = args[random_state_index]
    397         except TypeError as e:

IndexError: tuple index out of range

The above exception was the direct cause of the following exception:

NetworkXError                             Traceback (most recent call last)
<ipython-input-13-4a39fa27cfaf> in <module>
      2                                      edge_attr=True,
      3                                      create_using=nx.MultiDiGraph)
----> 4 nx.draw(G)

~\Anaconda3\lib\site-packages\networkx\drawing\nx_pylab.py in draw(G, pos, ax, **kwds)
    121         kwds["with_labels"] = "labels" in kwds
    122 
--> 123     draw_networkx(G, pos=pos, ax=ax, **kwds)
    124     ax.set_axis_off()
    125     plt.draw_if_interactive()

~\Anaconda3\lib\site-packages\networkx\drawing\nx_pylab.py in draw_networkx(G, pos, arrows, with_labels, **kwds)
    331 
    332     if pos is None:
--> 333         pos = nx.drawing.spring_layout(G)  # default to spring layout
    334 
    335     draw_networkx_nodes(G, pos, **node_kwds)

~\Anaconda3\lib\site-packages\decorator.py in fun(*args, **kw)
    229             if not kwsyntax:
    230                 args, kw = fix(args, kw, sig)
--> 231             return caller(func, *(extras + args), **kw)
    232     fun.__name__ = func.__name__
    233     fun.__doc__ = func.__doc__

~\Anaconda3\lib\site-packages\networkx\utils\decorators.py in _random_state(func, *args, **kwargs)
    398             raise nx.NetworkXError("random_state_index must be an integer") from e
    399         except IndexError as e:
--> 400             raise nx.NetworkXError("random_state_index is incorrect") from e
    401 
    402         # Create a numpy.random.RandomState instance

NetworkXError: random_state_index is incorrect

我想将图形提取回数据框,如下所示:

df_2 = pd.DataFrame({
    'key' : ['E', 'K'],
    'step_0' : ['A', 'F'],
    'step_1' : ['B', 'G'],
    'step_2' : ['C', 'H'],
    'step_3' : ['D', 'I'],
    'step_4' : ['E', 'J'],
    'step_5' : [np.NaN, 'K']
})
df_2

我知道我可以用 networkx 做到这一点,linked 问题的评论中也建议这样做。但是我不明白如何摆脱 nx 错误。

我的环境是 anaconda 的最新版本,有 Jupyter NotebookPython 3.8.8networkx 2.5Decorator 5.0.6Matplotlib 3.3.4。我精确它是因为 decorator 的最新版本应该根据 .

解决这个问题

我认为是因为 Decorator 5.0.6,所以我需要将 anaconda 升级到包含 Decorator 5.1.0 的最新版本,这不再导致此问题。

为了完成对上一个问题的引用,我已经发布,我必须安装 GraphvizPygraphviz 因为它包括更好的图表绘制。这也不容易,因为它一开始不兼容 Anaconda 环境,the pygraphviz documentation 建议不要在 Anaconda 中使用它。

但是,我问了 那些给一群人带来困难的图书馆。在这个问题中链接了在 Anaconda 上安装 Graphviz 的教程,问题本身显示了如何在 Anaconda 上安装 Pygraphviz