使用具有多个分隔符networkx / pandas的.txt文件中的属性添加节点

时间:2015-11-02 19:12:12

标签: python nodes networkx edges

我有一个.txt文件,有46行,每行代表网络中的一个节点,然后有很多属性。

Example Name; 03.01.194, Luzern, (LU), Test, Attribute, Other Attribute, 
Kasdasd Alex; 22.12.1957, in Blabla, (ZH), Bürgerorte, Oeschgen (AG),  Zivilstand, 

我不确定如何让networkx将其视为节点列表,我想到的一些事情可能会有效,但目前还不行

import pandas as pd
import networkx as nx
nodes = pd.read_csv('final.csv', header=None)
nodes

上面代码的问题是属性用逗号分隔,而不是节点。

另一个尝试,我想打开文件,并逐行添加节点,但卡在G.add_node()命令

G = nx.Graph()
with open('final.txt') as infile:
    for line in infile:
        G.add_node()

是两种方法中的一种,或者我应该尝试不同的方法吗?

同样为了进一步分析,networkx是否提供了比较节点属性的可能性,如果它们匹配,是否可以创建加权边缘?

1 个答案:

答案 0 :(得分:3)

您可以通过阅读指定分隔符的文件来实现此目的:&#39 ;;'这样第一个元素就是节点键,其余的就是属性。然后使用分隔符','拆分属性字符串。并将返回的列表添加为节点属性。我复制了您在' test.txt'中提供的示例。文件并执行以下代码。

G = nx.DiGraph()

csv_F = csv.reader(open("test.txt"),delimiter=';')
for row in csv_F:
    attributes=row[1].split(',')
    G.add_node(row[0], attr = attributes)

然后我按如下方式打印节点及其属性:

for n in G.nodes():
    print 'Node: '  + str(n)
    print 'Atrributes' + str(G.node[n]['attr'])

结果:

  

节点:Kasdasd Alex

     

Atrributes:[' 22.12.1957','在Blabla',' (ZH)',' B \ xc3 \ xbcrgerorte',' Oeschgen(AG)',' Zivilstand','']

     

节点:示例名称

     

Atrributes:[' 03.01.194','卢塞恩',' (LU)','测试','属性','其他属性',' ']

至于你的问题,networkx提供了这样的功能和更多功能。看一下教程here