繁体   English   中英

使用 NetworkX 使用 for 循环将 Dataframe 转换为 Graph

[英]Turning Dataframe into Graph with for loop with NetworkX

我有这个数据框:

MATNR   PSTAT   MTART   MATKL   MEINS   BSTME   ZEINR   WRKST   NORMT   EKWSL   BRGEW
0       KDEA    ZHLB    99999   EA              Z005    0.089   0.089   0       FT3
1       KDVC    ZPLN    99000   EA                      3.14    3.14    0.015   FT3
2       KDVC    ZPLN    99000   EA                      3.14    3.14    0       FT3
3       KDVC    ZPLN    99000   EA                      3.14    3.14    0.02    FT3

我正试图用networkX把它变成一个图。 这是我到目前为止的代码:

G = nx.Graph()

num_row = len(attr_df)
keys = len(attr_df.columns)
attrs = {}

for i in range(num_row):
    G.add_node(attr_df['MATNR'][i], 'PSTAT'='KDEA', 'MTART' = 99999, ...)

问题是每一行都有不同的属性,而且如果数据集要获得更多的行和列,添加属性和值的过程将是乏味的。

如何遍历每一列以添加属性及其值?

您可以在没有 for 循环的情况下在以下图表中创建节点:

import pandas as pd
import networkx as nx

data = {'MATNR': {0: 0, 1: 1, 2: 2, 3: 3},
     'PSTAT': {0: 'KDEA', 1: 'KDVC', 2: 'KDVC', 3: 'KDVC'},
     'MTART': {0: 'ZHLB', 1: 'ZPLN', 2: 'ZPLN', 3: 'ZPLN'},
     'MATKL': {0: 99999, 1: 99000, 2: 99000, 3: 99000},
     'MEINS': {0: 'EA', 1: 'EA', 2: 'EA', 3: 'EA'},
     'BSTME': {0: 'Z005', 1: '3.14', 2: '3.14', 3: '3.14'},
     'ZEINR': {0: 0.089, 1: 3.14, 2: 3.14, 3: 3.14},
     'WRKST': {0: 0.089, 1: 0.015, 2: 0.0, 3: 0.02},
     'NORMT': {0: '0', 1: 'FT3', 2: 'FT3', 3: 'FT3'},
     'EKWSL': {0: 'FT3', 1: None, 2: None, 3: None},
     'BRGEW': {0: None, 1: None, 2: None, 3: None}}

df = pd.DataFrame.from_dict(data)

G = nx.Graph()

#get list of node names
node_names = df['MATNR'].copy().to_list()

#get dict of node attributes without name
attributes_dict = df.drop('MATNR', axis = 1).to_dict('records')

#create list of tuples [(node_name, attributes as dict)] to pass to graph
nodes_tuple = list(zip(node_names, attributes))

#add nodes to graph
G.add_nodes_from(nodes)

或者,如果您想/必须在 for 循环中执行此操作:

G = nx.Graph()

for index, row in df.iterrows():

    #create dict from row
    row_dict = row.to_dict()
    
    #adjust dict of specific nodes etc.

    #pop name and unpack dict to pass to graph
    G.add_node(row_dict.pop('MATNR'), **row_dict)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM