代码之家  ›  专栏  ›  技术社区  ›  martin

搜索csv文件,最佳做法是什么?

  •  0
  • martin  · 技术社区  · 5 年前

    我有一个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.
    

    每个人可以有50k个基因,在文件中,我有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'"
    

    在这种情况下很重要: 有时需要检查2个基因。 例如:

    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个或多个基因时,我可以将结果保存在变量中。使用的内存更少(我想),但时间更长。

    这是我的两个命题,我不知道在这种情况下哪个更好。我的解决方案很可能不是解决这个问题的最佳方案,所以如果你有其他想法,我很乐意提供帮助。

    因此,我需要将所有可能的病人保存在一个新的档案中。但移动它们不是问题。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Mohammed Khalid    5 年前
     pd.read_csv(r'../input/data.csv', chunksize='choose your size')
    

    您可以分块读取文件,并且仍然具有强大的pandas技术,如分组