【问题标题】:Python - How to remove duplicates in huge CSV file (200+ Million rows)Python - 如何在巨大的 CSV 文件中删除重复项(200+ 百万行)
【发布时间】:2019-01-30 16:25:45
【问题描述】:

我们制作了一个图像识别 API,它接受图像 URL 并响应图像描述。这个过程大约需要 5-20 秒。 我有一个巨大的 CSV 文件,其中包含从不同来源抓取的 200+ 百万行图像 URL。我发现 CSV 文件具有来自不同来源的重复图像 URL。所以我不需要将所有 URL 发送到图像识别 API,我只需将唯一 URL 发送到 API,但我需要将 API 的响应填充到所有行。

我以 100K 行的块读取 CSV 文件并创建了一组唯一的图像 URL,并在 API 中处理它们,然后再次将结果填充回 CSV 文件。但它最终出现了内存问题(16 GB RAM),我无法创建一组具有 200+ 百万行的唯一图像 URL。

有什么建议吗?

【问题讨论】:

  • 您是否有理由坚持使用 CSV 而不是使用可以设置唯一性限制的数据库?运行搜索而不是扫描整个 CSV 也会更有效
  • 是的,我同意它从数据库中处理数据比从 CSV 文件中轻松处理数据。但他们向我提供了 CSV 文件并进行处理。
  • 使用外部(内存不足)方法进行排序。然后删除重复项是微不足道的,因为它们将彼此相邻。
  • 好的,但是您可以将其放入 SQLite 数据库或其他东西中。这具有最少的设置

标签: python pandas csv dataframe duplicates


【解决方案1】:

两种可能的方法:

SQL 选择不同

将 CSV 文件加载到数据库中并使用 SQL 选择 Distinct 并将查询结果导出为 CSV 文件。某些数据库允许您将 CSV 文件定义为表,并允许您在 CSV 文件上运行 SQL 查询

从 UrlTable 中选择不同的 URL

对文件进行排序

你可以

  • 使用您的操作系统排序命令对 URL 上的文件进行排序(Windows 和 Linux 都有排序命令)。
  • 读取文件并检查 URL 是否与上一个 URL 不同。您只需要在 URL 发生变化时检查它

【讨论】:

    【解决方案2】:

    不确定这种方法是否适合如此大的文件。不过,你可以试一试。

    import csv
    entries = set()
    
    with open("HugeCSVfile.csv", 'r') as lookuplist:
        for col in csv.reader(lookuplist):
            key = (col[0].lower()) # add rows you want to compare and remove the duplicates.
            if key not in entries:
                entries.add(key)
                print(key)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2020-04-10
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多