.vcf 数据到 pandas 数据框

Mig*_*gan 1 python data-analysis pandas vcf-variant-call-format

如何将此VCF 数据转换为 pandas 数据框?

注意:复制问题不需要完整文件。只需前 50 行(上面要点链接的第一部分)就可以了。

理想情况下,我希望采用以下形式:

在此输入图像描述

到目前为止,我只能获取标题:

import pandas as pd

f = open('clinvar_final.txt',"r")

for line in f.readlines():
    if line[:5] == 'CHROM':
        vcf_header = line.strip().split('\t')

df = pd.DataFrame
df.header = vcf_header
Run Code Online (Sandbox Code Playgroud)

Chi*_*and 5

无需逐行阅读。

Pandas 有一个选项comment,可以用来跳过不需要的行。

您可以通过运行以下行将 VCF 文件直接加载到 pandas 中。

In [9]: pd.read_csv('clinvar_final.txt', sep="\t", comment='#')
Out[9]: 
        CHROM        POS      ID REF ALT FILTER QUAL                                               INFO
0           1    1014O42  475283   G   A      .    .  AF_ESP=0.00546;AF_EXAC=0.00165;AF_TGP=0.00619;...
1           1    1O14122  542074   C   T      .    .  AF_ESP=0.00015;AF_EXAC=0.00010;ALLELEID=514926...
2           1    1014143  183381   C   T      .    .  ALLELEID=181485;CLNDISDB=MedGen:C4015293,OMIM:...
3           1    1014179  542075   C   T      .    .  ALLELEID=514896;CLNDISDB=MedGen:C4015293,OMIM:...
4           1    1014217  475278   C   T      .    .  AF_ESP=0.00515;AF_EXAC=0.00831;AF_TGP=0.00339;...
...       ...        ...     ...  ..  ..    ...  ...                                                ...
102316      3  179210507  403908   A   G      .    .  ALLELEID=393412;CLNDISDB=MedGen:C0018553,Orpha...
102317      3  179210511  526648   T   C      .    .  ALLELEID=519163;CLNDISDB=MedGen:C0018553,Orpha...
102318      3  179210515  526640   A   C      .    .  AF_EXAC=0.00002;ALLELEID=519178;CLNDISDB=MedGe...
102319      3  179210516  246681   A   G      .    .  AF_EXAC=0.00001;ALLELEID=245287;CLNDISDB=MedGe...
102320      3  179210538  259958   A   T      .    .  AF_EXAC=0.00001;ALLELEID=251013;CLNDISDB=MedGe...
Run Code Online (Sandbox Code Playgroud)

  • 请注意,与 OP 的数据不同,有效的 VCF 文件将以“CHROM”开头的行前面带有“#”字符(请参阅 [Erik McKelvey 的评论](/sf/ask/4915383091/ -data-to-pandas-dataframe#comment124215934_70219758) 上面)。这意味着要么需要在调用“pd.load_csv()”时手动指定标头,要么需要解析文件以找到该行。 (5认同)