【问题标题】:searching csv file, which is best practice?搜索 csv 文件,这是最佳做法?
【发布时间】:2020-05-12 19:51:55
【问题描述】:

我有一个如下所示的 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 个或更多基因时,我可以将结果保存在变量中。使用的内存更少(我认为)但更长。

这是我的两个建议,我不知道在这种情况下使用哪个更好。我的解决方案很可能不是解决该问题的最佳解决方案,因此如果您有其他想法,我将很乐意提供帮助。

结果我需要将所有可能的病人保存在一个新文件中。但是移动它们不是问题。

【问题讨论】:

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

标签: python pandas csv search


【解决方案1】:
 pd.read_csv(r'../input/data.csv', chunksize='choose your size')

你可以分块读取文件,你仍然拥有强大的 pandas 技术,例如分组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2013-11-11
    相关资源
    最近更新 更多