[英]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.