处理大型数据集时的Python性能

时间:2019-08-09 13:36:04

标签: python performance dataset

我对Python的速度有一些疑问。我有两个包含数据的列表,看起来像这样:

GCA_NUMBER.VERSION name sth_else etc. (FILE A - 170k lines) 
GCF_NUMBER.VERSION name sth_else etc. (FILE B - 450k lines)

目标是消除文件A中出现在文件B中的重复项,例如:

GCA_0000025.1
GCF_0000025.5

我只关心带有NUMBER的零件,但不能丢失其他信息,例如姓名。

我尝试了两种方法:

for i in FILE_A:
    for j in FILE_B:
        if i[0] == j[0]:then sth

大约花了17分钟 第二:

tmp_lst = [i[0] for i in FILE_B]
for i in FILE_A:
    if i not in tmp_lst: then sth

大约花了13分钟。 有没有更快的方法?

1 个答案:

答案 0 :(得分:1)

这里有几个不错的选择:How can I compare two lists in Python and return matches,可以对其进行调整以实现您的目标。

Joshmaker的答案涉及较大数据集的一些选项的性能。

我使用的一种解决方案是将文件读取为pandas数据帧,并在删除重复项时使用外部联接。对于约2-10k行的数据集,这是相当有效的。

def compareFile(newDataframe,oldDataframe):
        combinedDataframe = pd.concat([newDataframe,oldDataframe],sort=True,axis=0,ignore_index=True, join="outer").drop_duplicates(subset=["Date","Facility","Measure","Procedure"]).reset_index()
        return combinedDataframe