擅长:python、mysql、java
<p>这里基本上是相同的答案,但是更新了一些细节。我们将从基本相同的设置开始,但这里不会有节点的索引,只是地址@LancelotHolmes comment并使其更通用的名称:</p>
<pre><code>import networkx as nx
import pandas as pd
linkData = pd.DataFrame({'source' : ['Amy', 'Bob'],
'target' : ['Bob', 'Cindy'],
'weight' : [100, 50]})
nodeData = pd.DataFrame({'name' : ['Amy', 'Bob', 'Cindy'],
'type' : ['Foo', 'Bar', 'Baz'],
'gender' : ['M', 'F', 'M']})
G = nx.from_pandas_edgelist(linkData, 'source', 'target', True, nx.DiGraph())
</code></pre>
<p>这里的<code>True</code>参数告诉NetworkX将linkData中的所有属性保留为链接属性。在本例中,我将其设为<code>DiGraph</code>类型,但如果不需要,则可以用明显的方式将其设为另一种类型。</p>
<p>现在,由于需要根据从linkData生成的节点的名称来匹配nodeData,因此需要将nodeData dataframe的索引设置为<code>name</code>属性,然后再将其设置为字典,以便NetworkX 2.x可以将其作为节点属性加载。</p>
<pre><code>nx.set_node_attributes(G, nodeData.set_index('name').to_dict('index'))
</code></pre>
<p>这会将整个nodeData数据帧加载到一个字典中,其中键是名称,其他属性是键:键内的值对(即,节点索引是其名称的普通节点属性)。</p>