【发布时间】:2021-09-27 09:39:19
【问题描述】:
假设我有一个包含几百万行的大文件。前 300 多行(可变编号)包含有关文件的信息,然后在数据之前有一个标题行。我不知道标题在哪一行,但我知道它的开头。这是我的数据示例:
#This File contains some cool suff
#We will see what line the header is on
#Maybe it is in this line
#CHROM POS ID
1 100 17
2 200 18
2 300 18
标题行是#CHROM POS ID
这是我尝试过的,但它返回 list index out of range:
database = pd.read_table(infile, header=[num for num,line in enumerate(infile) if line.startswith("#CHROM")])
我认为我天真地假设pd.read_table 的运作方式与with open() 相同,并且可能奏效了。任何帮助将不胜感激!
【问题讨论】:
-
infile是字符串还是文件对象? -
除非第一列的名称不是
#CHROM(包括#),否则这不是有效的 csv 文件。如果标题行删除了#(通过任何方式,例如预处理),您可以简单地在pd.read_csv中设置comment='#'。如果第一列的名称确实是#CHROM,那么最好选择另一个字符,因为这不能让您与注释行区分开来(同样,除非这些不以#开头(此处有额外空格),那么您可以设置@ 987654336@). -
我没有将文件称为 csv 文件。我称它为文本文件。前几百行具有注释格式,但标题也是如此。这就是我问这个问题的原因!