我有一个由可能的网络连接组成的数据帧,格式为df = pd.DataFrame(["A", "B", "Count", "some_attribute"])
。此数据帧表示如下连接:
我想将这个数据帧导出为graphml格式。使用以下代码可以正常工作:
import networkx as nx
G = nx.Graph()
G.add_weighted_edges_from(df[["A", "B", "Count"]].values)
nx.write_graphml(G, "my_graph.graphml")
这段代码生成一个带有正确图形的graphml文件,我可以将其用于Gephi。现在我要添加一个属性:
^{pr2}$每当我试图在这段代码中添加属性时,就不可能将其写入graphml文件。使用此代码,我得到以下错误消息:
NetworkXError: GraphML writer does not support <class 'numpy.ndarray'> as data values.
我找到了相关的文章(比如thisone),但是它没有提供任何解决这个问题的方法。有没有人有一个使用networkx向graphml文件添加属性的解决方案,以便我可以在Gephi中使用它们?在
假设随机数据帧:
按照上面的代码实例化
^{pr2}$Graph
:检查一条边时,
numpy
数组df['some_attribute'].values
被指定为每个边的一个属性:如果我正确理解您的意图,我假设您希望每个边的属性对应于
df['some_attribute']
列。在您可能会发现使用^{} 创建
Graph
更加容易,尤其是因为您已经在DataFrame
对象中格式化了数据。在写入文件没有问题:
但是,我不是一个普通的Gephi用户,所以可能有另一种方法来解决以下问题。当我用
'Count'
作为边属性加载文件时,Gephi图默认情况下不识别边权重。因此,我将列名从'Count'
更改为'weight'
,并在加载到Gephi时看到以下内容:希望这有帮助,我能正确理解你的问题。在
编辑
根据Corley上面的评论,如果您选择使用
add_edges_from
,那么可以使用以下内容。在虽然没有显著的性能提升,但是我发现
from_pandas_dataframe
更具可读性。在相关问题 更多 >
编程相关推荐