首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pandas在大于内存的数据集中获取重复行

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

Stack Overflow用户
提问于 2017-02-16 23:02:00
回答 2查看 1.3K关注 0票数 0

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

但是,我的数据集大于内存容量(甚至大于在合理的预算限制内扩展后所能容纳的容量)。

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

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

EN

回答 2

Stack Overflow用户

发布于 2017-02-16 23:37:42

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

代码语言:javascript
复制
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...
票数 2
EN

Stack Overflow用户

发布于 2017-02-16 23:17:58

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

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

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

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42277561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档