搜索CSV文件,哪种方法最佳?

3

我有一个CSV文件,它的样子是这样的: (为了清晰起见,在我的CSV中没有头部,但我在这里添加了它们)

geneName, personNumber, allele1, allele2
gene-1-A, PERSON1, C, G
gene-2_s, PERSON1, A, C
gene_3_D, PERSON1, T, T
.
.
.
gene-1_A, PERSON2, G, G
gene_3_D, PERSON2, A, C
.
.
etc.

每个人可能有5万基因,例如我手头有400个人的文件。
我需要实现一些条件,如:
if personX has allele1 in gene-1_A = "A" AND allele1 in gene-1_A = "B" then add to results.txt "PersonX 'cancer possible'"

在这种情况下,需要检查两个基因。例如:

重要提示:

if (gene1 = 'A' AND 'B') AND (gene213213 = 'G' AND 'G') THEN add then add to results.txt "PersonX 'cancer possible'"

但是条件不是问题,我可以写。但在文件中搜索基因怎么办?我无法索引它,因为有时一个人有一种基因,另一个人没有。
我知道两种方法:
1. 通过pandas将整个CSV文件读入内存,并创建新列以替换函数的方式创建条件,或使用某种不同的方式。但仍会将整个文件加载到内存中。 2. 纯python逐行读取文件并检查每一行。在第一种情况下,如果一种基因很好,保存结果到新列中。在第二种情况下,当我需要检查2个或更多基因时,可以将结果保存在变量中。使用的内存较少(我认为),但时间较长。
这是我的两个方案,而我不知道哪一个在这种情况下更好。我的解决方案可能不是该问题的最佳解决方案,因此,如果您有其他想法,我将很高兴获得帮助。
结果,我需要在一个新文件中保存所有可能的患者。但是将它们移动并不是问题。

如果您在版本1中实现它,是否会出现内存错误?那里有什么问题? - GPhilo
我有很多文件,如果它们小于10GB,那就没问题,但是大于10GB可能会有问题。我想创建一个最优的、通用的模块来完善我的数据准备工具。 - martin
2
将有趣的记录写入单独的文件比移动它们(即从输入文件中删除然后写入)更容易和高效。因此,第二种方法似乎更加简单、自然和高效。将有问题的记录写入新文件并忘记它。 - tripleee
2
从描述来看,似乎您只需要在每次内存中保留一个人的数据。无需一次性加载所有文件的所有数据。 - GPhilo
@GPhilo没错。好的,那么我会尝试以那种方式解决它。看起来更像是第二个解决方案,具有特定的读取属性。 - martin
1个回答

2
 pd.read_csv(r'../input/data.csv', chunksize='choose your size')

您可以分块读取文件,同时仍然可以使用强大的pandas技术,例如分组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接