Python 使用pandas在大于内存的数据集中获取重复行

Python 使用pandas在大于内存的数据集中获取重复行,python,pandas,duplicates,large-data,Python,Pandas,Duplicates,Large Data,对于在dataframe中跨指定列查找重复行非常有用 然而,我的数据集比内存中的数据集要大(甚至比在合理的预算限制内扩展数据集后可以容纳的数据集还要大) 这对于我必须执行的大多数分析都很好,因为我可以循环我的数据集(csv和dbf文件),将每个文件单独加载到内存中,并按顺序执行所有操作。但是,关于重复分析,这显然不适合在整个数据集中查找重复项,而只适合在单个文件中查找重复项 是否有任何算法或方法可以在不必同时将多个数据帧全部加载到内存中的情况下跨多个数据帧查找重复项?我建议两件事。 首先是尽可能

对于在dataframe中跨指定列查找重复行非常有用

然而,我的数据集比内存中的数据集要大(甚至比在合理的预算限制内扩展数据集后可以容纳的数据集还要大)

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


是否有任何算法或方法可以在不必同时将多个数据帧全部加载到内存中的情况下跨多个数据帧查找重复项?

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

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

尝试按文件中的键列对行进行排序,这样就可以通过只比较一行和下一行来检测重复


希望能有帮助。

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

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

尝试按文件中的键列对行进行排序,这样就可以通过只比较一行和下一行来检测重复


希望对您有所帮助。

您可以对“key”列的值进行散列,并维护一组已经遇到的散列代码:

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...

您可以散列“key”列的值,并维护一组已经遇到的散列代码:

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...

如何对行的值进行散列并查找重复的散列值?我不理解如何像这个问题所问的那样“获取”重复行与“删除”重复行是一样的,因为标记为重复的问题是如何对行的值进行散列并查找重复的散列值?我不理解如何“获取”如本问题所述,重复行与“删除”重复行相同,因为标记为此AskSort重复的问题类似于“查找重复项”问题,仅当您的数据以前已排序时才是一个好建议Sort类似于“查找重复项”问题,仅当您的数据以前已排序时才是一个好建议