<p>使用<a href="http://networkx.readthedocs.io/en/latest/reference/generated/networkx.convert_matrix.from_pandas_dataframe.html" rel="noreferrer">^{<cd1>}</a>从边表创建加权图:</p>
<pre><code>import networkx as nx
import pandas as pd
edges = pd.DataFrame({'source' : [0, 1],
'target' : [1, 2],
'weight' : [100, 50]})
nodes = pd.DataFrame({'node' : [0, 1, 2],
'name' : ['Foo', 'Bar', 'Baz'],
'gender' : ['M', 'F', 'M']})
G = nx.from_pandas_dataframe(edges, 'source', 'target', 'weight')
</code></pre>
<p>然后使用<a href="https://networkx.github.io/documentation/development/reference/generated/networkx.classes.function.set_node_attributes.html" rel="noreferrer">^{<cd2>}</a>从字典中添加节点属性:</p>
<pre><code>nx.set_node_attributes(G, 'name', pd.Series(nodes.name, index=nodes.node).to_dict())
nx.set_node_attributes(G, 'gender', pd.Series(nodes.gender, index=nodes.node).to_dict())
</code></pre>
<p>或者遍历图形以添加节点属性:</p>
<pre><code>for i in sorted(G.nodes()):
G.node[i]['name'] = nodes.name[i]
G.node[i]['gender'] = nodes.gender[i]
</code></pre>
<h3>更新:</h3>
<p>从<code>nx 2.0</code>开始,<code>nx.set_node_attributes</code>的参数顺序为<a href="https://networkx.github.io/documentation/stable/reference/generated/networkx.classes.function.set_node_attributes.html" rel="noreferrer">changed</a>:<code>(G, values, name=None)</code></p>
<p>使用上面的示例:</p>
<pre><code>nx.set_node_attributes(G, pd.Series(nodes.gender, index=nodes.node).to_dict(), 'gender')
</code></pre>