python NetworkX:将多个输入节点添加到Excel单元格中的一个节点,并使用逗号分隔值

ruyhziif  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(165)

我最近一直在使用NetworkX库,我正试图从逗号分隔的Excel列中添加多个in节点(前置任务)。
对于节点F10,前导是F07、F09和F05。
Process
Predecessor
我正在阅读列并使用 *from_panda_edgelist * 创建节点和边。

g = nx.DiGraph()
g = nx.from_pandas_edgelist(df1, 'Process Step', 'Predecessors',
                         create_using=nx.DiGraph())

[('F00', 'F01'), ('F01', 'F02'), ('F02', 'F03'), ('F03', 'F04'), ('F03', 'F06'), ('F03', 'F08'), ('F04', 'F05'), ('F06', 'F07'), ('F08', 'F09'), ('F05,F07,F09', 'F10'), ('F10', 'F11')]
以这种方式读取不会为F10创建单独的节点,但它们将输入节点视为单个节点,从而生成此图。
Resulting graph
我想获取F05、F07、F09到F10的各个连接。
以前有没有人遇到过这个问题?我试过其他表示节点的格式,仍然不起作用。

gzszwxb4

gzszwxb41#

若要从项目列表创建多行,可以使用Pandasexplode方法。
但是,从外观上看,Predecessor列中的项并不像列表那样格式化,因此首先需要将它们转换为列表。
为此,您可以使用str.split方法,该方法将根据指定的分隔符将字符串分隔为列表。在您的示例中,分隔符是逗号,它将F05,F07,F09分隔为['F05', 'F07', 'F09']
因此,对于您的示例,下面的代码应该有效:

df1['Predecessor'] = df1['Predecessor'].str.split(',') # Convert string to list
df1 = df1.explode('Predecessor') # Convert list to separate rows

生成的 Dataframe 如下所示(不清楚'Predecessor'列的第一行是什么,所以它变成了NaN):

Process Predecessor
0      F00         NaN
1      F01         F00
2      F02         F01
3      F03         F02
4      F04         F03
5      F05         F04
6      F06         F03
7      F07         F06
8      F08         F03
9      F09         F08
10     F10         F05
10     F10         F07
10     F10         F09
11     F11         F10

现在,运行g = nx.from_pandas_edgelist(df1, 'Process', 'Predecessor', create_using = nx.DiGraph()应该会按照您期望的方式工作。

相关问题