将pandas数据帧转换为Networkx对象时,边数不同

时间:2017-09-19 20:32:01

标签: python dataframe networkx

我正在使用networkx从txt文件构建电子邮件网络结构,其中每行代表一个"边缘。"我首先将txt文件(3列:{' #Sender','收件人''时间'})加载到Python中,然后转换为{{1使用以下代码对象:



networkx




import networkx as nx import pandas as pd email_df = pd.read_csv('email_network.txt', delimiter = '->') email = nx.from_pandas_dataframe(email_df, '#Sender', 'Recipient', edge_attr = 'time')数据可以访问here

但是,email.txtemail_df pandas个对象)的长度为82927,而DataFrameemail个对象)的长度为3251

Networkx

我真的很困惑,因为即使对于In [1]: len(email_df) In [2]: 82927 In [3]: len(email.edges()) In [4]: 3251 的前两列中包含相同两个节点的行具有相同的方向序列(例如,' 1'到' 2'),第三列('时间',意思是时间戳)应该将它们彼此区分开,因此,不会出现复制的边缘。那么为什么在使用email_df来读取`email_df'?

之后,边数从82927急剧减少到3251?

有人会帮我解释一下吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

此处的行说明将ngOnInit() { this.getUserGroups(this.userId); } 列作为源节点,Sender列作为目标,并将Recipient添加为边缘属性 。因此,您只在Sender和Recipient之间创建单个(定向)边,并且只将最后一行的时间添加为边的属性。

time

您只能为一对节点定义一条边 - 您可以在构建网络之前对数据框进行分组,并将计数用作边的权重,

email = nx.from_pandas_dataframe(email_df, '#Sender', 'Recipient', edge_attr = 'time')