我有一个非常大的文件(包含dbSNP ID),包含100万行,每个包含一个字符串,还有另一个更大的文件(.vcf),包含6亿行,每个包含7-8列。
我想在较大文件中找到较小文件每一行的第一次出现,这使我程序的蛮力复杂度是1,000,000 * 600,000,000倍。我想要一种更快,更省内存的方法。我是使用python进行多处理或并行编程的新手,我不确定如何不使用它们都可以解决这个问题。
我尝试使用numpy
和pandas
库对两个文件的较小子集进行类似的操作:
import numpy as np
import pandas as pd
BigFile = pd.Series(arrayOfRowsOfBiggerFile)
SmallFile = pd.Series(arrayOfRowsOfSmallerFile)
FinalList = SmallFile.map(lambda x: np.where(A==x)[0][0]).tolist()
这要花很长时间才能执行,我相信可以通过python多重处理很好地处理。
答案 0 :(得分:4)
如果我理解正确,那么您实际上是在执行join
操作:您希望VCF中其关键字(在这种情况下为RSID)显示在“较小”文件中的所有行。在此处查看文档:{{3}}
您的代码将如下所示:
dbsnp = pd.read_csv('path/to/dbsnp', index_col='rsid', ...)
rsids_of_interest = pd.read_csv('path/to/smaller_file', ...)
subset_of_dbsnp = dbsnp.join(rsids_of_interest, how='inner', ...)