首页 > 解决方案 > 使用 pandas 跳过带有“#”的行

问题描述

我有一个像这样的大型数据集:

##fileformat=VCFv4.2
##fileDate=20201231
##source=PLINKv1.90
##contig=<ID=1,length=188260454>
##contig=<ID=10,length=85155382>
##contig=<ID=11,length=61676533>
##contig=<ID=12,length=36989714>
##contig=<ID=13,length=43784426>
##contig=<ID=14,length=94600040>
##contig=<ID=15,length=92851205>
##contig=<ID=16,length=88959756>
##contig=<ID=17,length=80722365>
##contig=<ID=18,length=82634671>
##contig=<ID=19,length=62678559>
##contig=<ID=2,length=121349915>
##contig=<ID=20,length=65336538>
##contig=<ID=3,length=121351672>
##contig=<ID=4,length=109462228>
##contig=<ID=5,length=96758658>
##contig=<ID=6,length=87227659>
##contig=<ID=7,length=100781181>
##contig=<ID=8,length=97562725>
##contig=<ID=9,length=85788908>
##contig=<ID=21,length=58983846>
##contig=<ID=22,length=50925167>
##contig=<ID=23,length=55555792>
##contig=<ID=24,length=48279991>
##contig=<ID=25,length=40282582>
##contig=<ID=26,length=43147527>
##contig=<ID=27,length=40254630>
##contig=<ID=28,length=47348126>
##contig=<ID=29,length=34775913>
##contig=<ID=30,length=31395421>
##contig=<ID=31,length=26000291>
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  A1  A2  A3  A4
1   235 1   A   C   .   .   PR  GT  1|1 1|1 0|0 0|1
1   1000    2   G   C   .   .   PR  GT  1|1 0|1 0|1 1|1
1   1256    3   T   G   .   .   PR  GT  1|1 1|1 0|1 1|1
1   5000    4   T   A   .   .   PR  GT  0|1 0|0 0|1 1|1
1   6234    5   A   T   .   .   PR  GT  0|1 1|1 1|0 0|1
1   77453   6   A   C   .   .   PR  GT  1|0 1|0 1|0 1|0
1   84004   7   C   G   .   .   PR  GT  0|1 1|0 0|1 0|0
1   123658  8   A   T   .   .   PR  GT  1|1 0|0 1|1 0|0
1   432567  9   T   A   .   .   PR  GT  0|1 1|1 0|0 0|0
1   567432  10  A   G   .   .   PR  GT  0|0 1|1 0|1 1|1
1   1234542 11  C   A   .   .   PR  GT  0|1 0|0 0|0 0|0

要读取此数据帧,我必须使用以下命令:

snp = pd.read_csv("Imputed.vcf",delimiter=r"\s+",header=0,skiprows=35)

实际上,我想跳过带有标签的行(行包含“#”),而不计算这些行。这种情况有什么办法吗?

标签: pythonpandaspython-2.7

解决方案


#如果需要从use开始删除所有行comment='#'

snp = pd.read_csv("Imputed.vcf", sep=r"\s+",comment='#', header=None)

如果需要 2 个或更多字符的注释,现在不支持。

可能的想法是预处理:

import csv

#preprocessing
def get_row():
    skipped = []
    with open('Imputed.vcf', 'r') as csvfile:
        reader = csv.reader(csvfile)
        for i, row in enumerate(reader):
            if row[0].strip()[:2] == '##':
                skipped.append(i)
    return skipped 
                

skip = get_row()
print (skip)

snp = pd.read_csv("Imputed.vcf", sep=r"\s+",skiprows=skip) 

推荐阅读