从python 3中具有数十亿条记录的文件中删除重复行的最快方法是什么?

时间:2018-09-29 06:13:25

标签: python python-3.x csv

我有一个CSV文件,其中一列包含数十亿条记录,从该文件中删除重复记录的最快方法是什么?

3 个答案:

答案 0 :(得分:1)

逐行读取文件。创建每行的哈希,如果该哈希在以前的哈希集中,则丢弃该行,否则将哈希添加到该集合中,并将该行存储到输出文件中。

这是代码。它一次处理输入的一行,但是需要存储一组哈希值,这些哈希值将随着唯一行的数量线性增长:

PostgreSQL 10.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.4.0) 6.4.0, 64-bit

替代方法:

您可以使用GZ-Sort对大文件进行排序,然后使用uniq命令轻松删除任何相邻的重复行。

答案 1 :(得分:0)

使用熊猫要简单得多,请详细了解drop_duplicates here

import pandas as pd
df = pd.DataFrame({"A":["cake", "cake", "icecream", "cheese"], "B":[0,6,6,6], "C":["A","A","B","A"]})
print(df)
    A        B  C
0   cake     0  A
1   cake     6  A
2   icecream 6  B
3   cake     6  A

然后我们就放下假面并设置keep=false.

df.drop_duplicates(subset=['A', 'C'], keep=False)
print(df)

    A        B  C
2   icecream 6  B
3   cake     6  A

答案 2 :(得分:0)

我会考虑两种方法:

  1. 如果您可以将整个文件插入内存,只需使用set

  2. 否则,如果输入文件大于可用内存,则创建一个sqlite数据库,设置一个具有唯一列约束的表,然后将数据插入该表中。使用executemany以获得最佳性能