【问题标题】:How to drop duplicated rows using pandas in a big data file?如何在大数据文件中使用 pandas 删除重复的行?
【发布时间】:2017-01-14 21:20:05
【问题描述】:

我有一个 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'])

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

有没有更好的办法?

【问题讨论】:

    标签: python database pandas bigdata


    【解决方案1】:

    你可以试试这样的。

    首先,创建你的分块器。

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

    现在创建一组 id:

    ids = set()
    

    现在遍历块:

    for chunk in chunker:
        chunk.drop_duplicates(['Author ID'])
    

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

        chunk = chunk[~chunk['Author ID'].isin(ids)]
    

    最后,还是在循环体内,添加新的 ids

        ids.update(chunk['Author ID'].values)
    

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

    【讨论】:

    • 谢谢!我试过了,但是内存还是不够。
    • @yangxg 你确定这个集合是占用你记忆的实体吗? len 的最大值是多少?如果这是问题所在,我们需要逐步升级。接下来我要尝试的是shelve
    • 将这样的东西添加到循环中可能会有所帮助吗? chunk['Author ID'] = pd.to_numeric(chunk['Author ID'], downcast='integer')
    猜你喜欢
    • 2015-08-19
    • 2021-07-03
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多