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 Notebook
和 Python 3.8.8
、networkx 2.5
、Decorator 5.0.6
、Matplotlib 3.3.4
。我精确它是因为 decorator
的最新版本应该根据 .
解决这个问题
我认为是因为 Decorator 5.0.6
,所以我需要将 anaconda 升级到包含 Decorator 5.1.0
的最新版本,这不再导致此问题。
为了完成对上一个问题的引用,我已经发布,我必须安装 Graphviz
和 Pygraphviz
因为它包括更好的图表绘制。这也不容易,因为它一开始不兼容 Anaconda 环境,the pygraphviz documentation 建议不要在 Anaconda 中使用它。
但是,我问了 那些给一群人带来困难的图书馆。在这个问题中链接了在 Anaconda 上安装 Graphviz
的教程,问题本身显示了如何在 Anaconda 上安装 Pygraphviz
。
这是我之前问题的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 Notebook
和 Python 3.8.8
、networkx 2.5
、Decorator 5.0.6
、Matplotlib 3.3.4
。我精确它是因为 decorator
的最新版本应该根据
我认为是因为 Decorator 5.0.6
,所以我需要将 anaconda 升级到包含 Decorator 5.1.0
的最新版本,这不再导致此问题。
为了完成对上一个问题的引用,我已经发布,我必须安装 Graphviz
和 Pygraphviz
因为它包括更好的图表绘制。这也不容易,因为它一开始不兼容 Anaconda 环境,the pygraphviz documentation 建议不要在 Anaconda 中使用它。
但是,我问了 Graphviz
的教程,问题本身显示了如何在 Anaconda 上安装 Pygraphviz
。