python – 使用Pandas或其他方法比较大(~40GB)的文本数据
发布时间:2020-12-20 13:15:50 所属栏目:Python 来源:网络整理
导读:我有大量的csv数据,大约40GB的大小我需要处理(我们称之为’body’).本机构中每个文件中的数据由单列CSV文件组成.每行是由单词和短句组成的关键字,例如, DogFeeding catused cars in Brightontrips to London..... 这些数据需要与另一组文件进行比较(这个文件
我有大量的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,names=['Keyword']) .query('Keyword not in @removals.Keyword')],ignore_index=True) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |