如何在大数据文件中使用熊猫删除重复的行?

yan*_*gxg 6 python database bigdata pandas

我有一个太大而无法加载到内存中的 csv 文件。我需要删除文件的重复行。所以我按照以下方式操作:

chunker = pd.read_table(AUTHORS_PATH, names=['Author ID', 'Author name'],      encoding='utf-8', chunksize=10000000)

for chunk in chunker:
    chunk.drop_duplicates(['Author ID'])
Run Code Online (Sandbox Code Playgroud)

但是如果重复的行分布在不同的块中,上面的脚本似乎无法获得预期的结果。

有没有更好的办法?

Ami*_*ory 3

你可以尝试这样的事情。

首先,创建你的分块器。

chunker = pd.read_table(AUTHORS_PATH, names=['Author ID', 'Author name'], encoding='utf-8', chunksize=10000000)
Run Code Online (Sandbox Code Playgroud)

现在创建一组 id:

ids = set()
Run Code Online (Sandbox Code Playgroud)

现在迭代块:

for chunk in chunker:
    chunk.drop_duplicates(['Author ID'])
Run Code Online (Sandbox Code Playgroud)

但是,现在,在循环体内,还删除已知 id 集中已有的 id:

    chunk = chunk[~chunk['Author ID'].isin(ids)]
Run Code Online (Sandbox Code Playgroud)

最后,仍在循环体内添加新的 id

    ids.update(chunk['Author ID'].values)
Run Code Online (Sandbox Code Playgroud)

如果ids太大而无法放入主内存,您可能需要使用一些基于磁盘的数据库。