У меня есть кадр данных pandas, который я хочу преобразовать в сеть, с такой структурой:
[NodeID, TargetID, NodeAttr1, NodeAttr2]
Но загвоздка в том, что у меня есть несколько строк, в которых TargetID может быть None, так как есть узлы, которые не подключены к сети. Есть ли простой способ создать сетевую структуру и назначить свои атрибуты?
Я пытался:
G = nx.from_pandas_edgelist(df)
Но этот метод дает мне возможность добавлять только атрибуты ребер, а не узлы. Также он создаст ребра из моих узлов, которые не соединены с пустотой. Так что не то, что я хочу.
import pandas as pd
import networkx as nx
d = {'NodeID': [1, 2], 'TargetID': [2, None], 'NodeAttr1': ['aaaa', 'bbbbb'], 'NodeAttr2': [3, 4]}
df = pd.DataFrame(data=d)
node_df = df[df['Node_ID']]
edge_df = df[df.TargetID.notnull()]
G = nx.from_pandas_edgelist(edge_df, 'NodeID', 'TargetID')
G.add_nodes_from(node_df['NodeID'])
Этот код создаст сеть i простым способом, но у меня все еще есть проблема, заключающаяся в том, что у меня возникают проблемы с назначением атрибутов моим узлам.
Есть ли решение этой проблемы, которое несколько эффективно использует ресурсы, так как я создаю много больших структур графа.
pandas.DataFrame.to_dict
с правильными аргументами (я думаю, вы хотите использоватьorient="index"
) для перехода вadd_nodes_from
, вы, вероятно, сможете приблизиться. вам может понадобиться создать два отдельных графика и скомпоновать их, чтобы объединить ребра в узлы с атрибутами. - person Corley Brigman   schedule 07.07.2019