使用pandas

时间:2017-02-16 15:02:00

标签: python pandas duplicates large-data

pandas.dataframe.duplicated非常适合在数据框中的指定列中查找重复的行。

但是,我的数据集大于内存中的数据集(甚至比我在合理的预算限制范围内扩展后的数据量还要大)。

这对我必须执行的大多数分析都很好,因为我可以遍历我的数据集(csv和dbf文件),将每个文件单独加载到内存中并按顺序执行所有操作。但是,对于重复分析,这显然不适合在整个数据集中查找重复项,但仅适用于单个文件。

是否有任何算法或方法可以在多个数据帧中查找重复项,而无需同时将它们全部加载到内存中?

2 个答案:

答案 0 :(得分:1)

我会建议两件事。 首先是尽可能将数据帧加载到rdbms中。 然后,您可以通过对键列进行分组来查找重复项。

其次,只从大文件中提取关键列并将它们相互比较。

尝试对文件中键列的行进行排序,这样您只需将一行与下一行进行比较就可以检测到重复。

希望有所帮助。

答案 1 :(得分:1)

您可以散列"键"的值。列并维护您已经遇到的一组哈希码:

import hashlib

hash_set = set()  # this will contain all the hash codes of rows seen

def is_duplicate(row):
    m = hashlib.md5()
    for c in ["column1", "column2", "column3"]:
        m.update(row[c])
    hash_code = m.digest()
    if hash_code in hash_set:
        return 1
    hash_set.add(hash_code)
    return 0

for df_path in [df1_path, df2_path, df3_path]:  # iterate dataframes 1 by 1
    df = pd.read_csv(df_path)  # load the dataframe
    df["duplicate"] = df.apply(is_duplicate, axis=1)
    unique_df = df[df["duplicate"]==0]  # a "globaly" unique dataframe
    unique_df.pop("duplicate")  # you don't need this column anymore
    # YOUR CODE...