微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 使用Pandas或其他方法比较大(~40GB)的文本数据

我有大量的csv数据,大约40GB的大小我需要处理(我们称之为’body’).本机构中每个文件中的数据由单列CSV文件组成.每行是由单词和短句组成的关键字,例如,

Dog
Feeding cat
used cars in Brighton
trips to London
.....

这些数据需要与另一组文件进行比较(这个文件大小为7GB,我将其称为“删除”),需要识别删除中的任何关键字并将其从正文中删除.删除的数据类似于身体中的数据,即:

Guns
pricless ming vases
trips to London
pasta recipes
........

虽然我有一种方法可以完成工作,但这是一个非常缓慢的方法,可能需要一个很好的一周才能完成.这是一种多线程方法,其中来自7GB主体的每个文件在for循环中与来自正文的文件进行比较.它将删除文件中的列作为列表进行转换,然后过滤正文文件以保留不在该列表中的任何行.然后将过滤后的数据附加到输出文件

def thread_worker(file_):


    removal_path="removal_files"
    allFiles_removals = glob.glob(removal_path + "/*.csv", recursive=True)
    print(allFiles_removals)

    print(file_)
    file_df = pd.read_csv(file_)

    file_df.columns = ['Keyword']

    for removal_file_ in allFiles_removals:

        print(removal_file_)
        vertical_df = pd.read_csv(vertical_file_, header=None)

        vertical_df.columns = ['Keyword']

        vertical_keyword_list = vertical_df['Keyword'].values.tolist()

        file_df = file_df[~file_df['Keyword'].isin(vertical_keyword_list)]


    file_df.to_csv('output.csv',index=False, header=False, mode='a')

显然,我的主要目标是找出如何更快地完成这项工作.熊猫甚至是最好的方法吗?在处理CSV文件时,我倾向于认使用它.

解决方法:

IIUC你可以这样做:

# read up "removal"  keywords from all CSV files, get rid of duplicates
removals = pd.concat([pd.read_csv(f, sep='~', header=None, names=['Keyword']) for f in removal_files]
                     ignore_index=True).drop_duplicates()


df = pd.DataFrame()
for f in body_files:
    # collect all filtered "body" data (file-by-file)
    df = pd.concat([df,
                    pd.read_csv(f, sep='~', header=None, names=['Keyword']) \
                      .query('Keyword not in @removals.Keyword')],
                   ignore_index=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐