【问题标题】:remove duplicates on large csv file, only look at a subset of columns删除大型 csv 文件上的重复项,仅查看列的子集
【发布时间】:2021-10-17 22:31:36
【问题描述】:

我需要删除大型 .csv 文件 (50+GB) 的重复项,我想使用 python 来执行此操作。其他几个问题广泛地解决了这个问题(例如:herehere),但它们处理的是完全重复的问题。

在我的情况下,重复不是完全重复。我的文件的设置是这样的,我通过从多个来源中提取行来编译这个文件,并且一列表示来源。这意味着我想删除列子集的重复项。文件的大小意味着我无法将其加载到内存中,所以 pandas 已经出局了。

我该如何解决这个问题(可能修改我链接到的解决方案)?

【问题讨论】:

    标签: python duplicates large-data


    【解决方案1】:

    对于大型数据帧,您可以使用dask。它的语法类似于 pandas,所以如果你熟悉它,你就没有问题。示例:

    import dask.dataframe as dsk
    df = dsk.read_csv('my_csv.csv')
    

    删除重复的语法Here:

    df.drop_duplicates(subset=None, split_every=None, split_out=1, ignore_index=False, **kwargs)
    

    允许子集。

    例子:

    from dask.distributed import Client
    import dask.dataframe as dsk
    client = Client(memory_limit='32GB') # set your limit here
    df = dsk.read_csv("my_csv", sample=100)
    results = df.drop_duplicates(subset=['my_col'], split_out=df.npartitions)
    results.to_csv(outdir, index=False)
    

    【讨论】:

    • 您能否对此进行扩展以显示如何/何时调用 .compute() 方法以及如何将输出保存为 .csv?我无法看到如何在不将 df 拉入内存的情况下执行此操作,并且我目前避免这种情况的尝试无法正常工作。
    • @amquack 添加了一个示例
    【解决方案2】:

    我推荐duckdb。这是一个快速介绍/基准测试:https://duckdb.org/2021/05/14/sql-on-pandas.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      相关资源
      最近更新 更多