【问题标题】:Filter out rows based a condition for keys in a column根据列中键的条件过滤掉行
【发布时间】:2022-12-09 17:20:44
【问题描述】:

我有一个非常大的制表符分隔文件,其中 8th 列包含多个 key:values; 分隔 如何根据特定 key:values 的条件过滤掉行

(健康)状况

AF_SAS < 0.05 or 0

定位模式

AF_SAS=

文件

#CHROM  POS ID  REF ALT QUAL    FILTER  INFO  
1   10523   .   TCCG    T   513.98  PASS    AC=3;AF=0.0008892;AN=3388;BaseQRankSum=0.926;MQ=45.64;MQRankSum=0.198;QD=5.78;ReadPosRankSum=-0.139;SOR=1.132;VQSLOD=0.453;culprit=SOR;AN_OCE=148;AC_OCE=0;HOM_OCE=0;AF_OCE=0;AN_NEA=654;AC_NEA=0;HOM_NEA=0;AF_NEA=0;AN_WER=228;AC_WER=0;HOM_WER=0;AF_WER=0;AN_AMR=52;AC_AMR=0;HOM_AMR=0;AF_AMR=0;AN_AFR=204;AC_AFR=3;HOM_AFR=0;AF_AFR=0.014705;AN_SAS=1442;AC_SAS=0;HOM_SAS=0;AF_SAS=0;AN_SEA=660;AC_SEA=0;HOM_SEA=0;AF_SEA=0  
1   14397   rs370886505 CTGT    C   11709.3 PASS    AC=160;AF=0.047;AN=3450;BaseQRankSum=0.289;;MQ=30.55;MQRankSum=0;QD=4.02;ReadPosRankSum=1.02;SOR=0.7;VQSLOD=0.421;culprit=QD;AN_OCE=148;AC_OCE=17;HOM_OCE=0;AF_OCE=0.114864;AN_NEA=702;AC_NEA=12;HOM_NEA=0;AF_NEA=0.017094;AN_WER=226;AC_WER=24;HOM_WER=0;AF_WER=0.106194;AN_AMR=52;AC_AMR=7;HOM_AMR=0;AF_AMR=0.134615;AN_AFR=208;AC_AFR=7;HOM_AFR=0;AF_AFR=0.033653;AN_SAS=1426;AC_SAS=65;HOM_SAS=1;AF_SAS=0.045582;AN_SEA=688;AC_SEA=28;HOM_SEA=0;AF_SEA=0.040697  
1   28591   .   T   TGG 4146.14 PASS    AC=67;AF=0.036;AN=1848;BaseQRankSum=0.736;MQ=9.35;MQRankSum=0.736;NEGATIVE_TRAIN_SITE;QD=25.75;ReadPosRankSum=0.804;SOR=1.911;VQSLOD=1.59;culprit=DP;AN_OCE=92;AC_OCE=4;HOM_OCE=1;AF_OCE=0.043478;AN_NEA=426;AC_NEA=39;HOM_NEA=10;AF_NEA=0.091549;AN_WER=74;AC_WER=3;HOM_WER=1;AF_WER=0.04054;AN_AMR=8;AC_AMR=1;HOM_AMR=0;AF_AMR=0.125;AN_AFR=130;AC_AFR=7;HOM_AFR=3;AF_AFR=0.053846;AN_SAS=746;AC_SAS=6;HOM_SAS=2;AF_SAS=0.008042;AN_SEA=372;AC_SEA=7;HOM_SEA=2;AF_SEA=0.018817  
1   29300   .   CG  C   111.6   PASS AC=1;AF=0.0003073;AN=3266;BaseQRankSum=0.163;MQ=25.25;MQRankSum=0.38;NEGATIVE_TRAIN_SITE;QD=6.97;ReadPosRankSum=-0.38;SOR=0.883;VQSLOD=-0.2157;culprit=FS;AN_OCE=142;AC_OCE=0;HOM_OCE=0;AF_OCE=0;AN_NEA=694;AC_NEA=0;HOM_NEA=0;AF_NEA=0;AN_WER=220;AC_WER=0;HOM_WER=0;AF_WER=0;AN_AMR=46;AC_AMR=0;HOM_AMR=0;AF_AMR=0;AN_AFR=176;AC_AFR=1;HOM_AFR=0;AF_AFR=0.005681;AN_SAS=1392;AC_SAS=0;HOM_SAS=0;AF_SAS=0;AN_SEA=596;AC_SEA=0;HOM_SEA=0;AF_SEA=0  
1   30955   .   CCT C   764.56  PASS    AC=33;AF=0.015;AN=2234;BaseQRankSum=0.727;MQ=24.19;MQRankSum=1.03;NEGATIVE_TRAIN_SITE;QD=18.2;ReadPosRankSum=0.736;SOR=2.658;VQSLOD=0.74;culprit=DP;AN_OCE=110;AC_OCE=0;HOM_OCE=0;AF_OCE=0;AN_NEA=556;AC_NEA=3;HOM_NEA=1;AF_NEA=0.005395;AN_WER=130;AC_WER=6;HOM_WER=1;AF_WER=0.046153;AN_AMR=30;AC_AMR=0;HOM_AMR=0;AF_AMR=0;AN_AFR=168;AC_AFR=2;HOM_AFR=1;AF_AFR=0.011904;AN_SAS=726;AC_SAS=17;HOM_SAS=7;AF_SAS=0.23415;AN_SEA=514;AC_SEA=5;HOM_SEA=0;AF_SEA=0.009727

期望的输出

#CHROM  POS ID  REF ALT QUAL    FILTER  INFO  
1   10523   .   TCCG    T   513.98  PASS    AC=3;AF=0.0008892;AN=3388;BaseQRankSum=0.926;MQ=45.64;MQRankSum=0.198;QD=5.78;ReadPosRankSum=-0.139;SOR=1.132;VQSLOD=0.453;culprit=SOR;AN_OCE=148;AC_OCE=0;HOM_OCE=0;AF_OCE=0;AN_NEA=654;AC_NEA=0;HOM_NEA=0;AF_NEA=0;AN_WER=228;AC_WER=0;HOM_WER=0;AF_WER=0;AN_AMR=52;AC_AMR=0;HOM_AMR=0;AF_AMR=0;AN_AFR=204;AC_AFR=3;HOM_AFR=0;AF_AFR=0.014705;AN_SAS=1442;AC_SAS=0;HOM_SAS=0;AF_SAS=0;AN_SEA=660;AC_SEA=0;HOM_SEA=0;AF_SEA=0  
1   14397   rs370886505 CTGT    C   11709.3 PASS    AC=160;AF=0.047;AN=3450;BaseQRankSum=0.289;;MQ=30.55;MQRankSum=0;QD=4.02;ReadPosRankSum=1.02;SOR=0.7;VQSLOD=0.421;culprit=QD;AN_OCE=148;AC_OCE=17;HOM_OCE=0;AF_OCE=0.114864;AN_NEA=702;AC_NEA=12;HOM_NEA=0;AF_NEA=0.017094;AN_WER=226;AC_WER=24;HOM_WER=0;AF_WER=0.106194;AN_AMR=52;AC_AMR=7;HOM_AMR=0;AF_AMR=0.134615;AN_AFR=208;AC_AFR=7;HOM_AFR=0;AF_AFR=0.033653;AN_SAS=1426;AC_SAS=65;HOM_SAS=1;AF_SAS=0.045582;AN_SEA=688;AC_SEA=28;HOM_SEA=0;AF_SEA=0.040697  
1   28591   .   T   TGG 4146.14 PASS    AC=67;AF=0.036;AN=1848;BaseQRankSum=0.736;MQ=9.35;MQRankSum=0.736;NEGATIVE_TRAIN_SITE;QD=25.75;ReadPosRankSum=0.804;SOR=1.911;VQSLOD=1.59;culprit=DP;AN_OCE=92;AC_OCE=4;HOM_OCE=1;AF_OCE=0.043478;AN_NEA=426;AC_NEA=39;HOM_NEA=10;AF_NEA=0.091549;AN_WER=74;AC_WER=3;HOM_WER=1;AF_WER=0.04054;AN_AMR=8;AC_AMR=1;HOM_AMR=0;AF_AMR=0.125;AN_AFR=130;AC_AFR=7;HOM_AFR=3;AF_AFR=0.053846;AN_SAS=746;AC_SAS=6;HOM_SAS=2;AF_SAS=0.008042;AN_SEA=372;AC_SEA=7;HOM_SEA=2;AF_SEA=0.018817  
1   29300   .   CG  C   111.6   PASS AC=1;AF=0.0003073;AN=3266;BaseQRankSum=0.163;MQ=25.25;MQRankSum=0.38;NEGATIVE_TRAIN_SITE;QD=6.97;ReadPosRankSum=-0.38;SOR=0.883;VQSLOD=-0.2157;culprit=FS;AN_OCE=142;AC_OCE=0;HOM_OCE=0;AF_OCE=0;AN_NEA=694;AC_NEA=0;HOM_NEA=0;AF_NEA=0;AN_WER=220;AC_WER=0;HOM_WER=0;AF_WER=0;AN_AMR=46;AC_AMR=0;HOM_AMR=0;AF_AMR=0;AN_AFR=176;AC_AFR=1;HOM_AFR=0;AF_AFR=0.005681;AN_SAS=1392;AC_SAS=0;HOM_SAS=0;AF_SAS=0;AN_SEA=596;AC_SEA=0;HOM_SEA=0;AF_SEA=0  

任何帮助将非常感激

感谢您的时间

【问题讨论】:

    标签: python-3.x pandas regex dataframe parsing


    【解决方案1】:

    您可以使用str.extract 提取数据,使用pandas.to_numeric 转换为数字,使用boolean indexing

    # extract the AF_SAS value, convert to numeric
    s = pd.to_numeric(df['INFO'].str.extract('AF_SAS=(d+.?d*)', expand=False),
                      errors='coerce')
    
    # filter rows where the value is < 0.05 
    out = df[s.lt(0.05)]
    

    输出:

       CHROM    POS           ID   REF  ALT      QUAL FILTER                                               INFO
    0      1  10523            .  TCCG    T    513.98   PASS  AC=3;AF=0.0008892;AN=3388;BaseQRankSum=0.926;M...
    1      1  14397  rs370886505  CTGT    C  11709.30   PASS  AC=160;AF=0.047;AN=3450;BaseQRankSum=0.289;;MQ...
    2      1  28591            .     T  TGG   4146.14   PASS  AC=67;AF=0.036;AN=1848;BaseQRankSum=0.736;MQ=9...
    3      1  29300            .    CG    C    111.60   PASS  AC=1;AF=0.0003073;AN=3266;BaseQRankSum=0.163;M...
    

    中间体:

    # s
    0    0.000000
    1    0.045582
    2    0.008042
    3    0.000000
    4    0.234150
    Name: INFO, dtype: float64
    
    # s.lt(0.05)
    0     True
    1     True
    2     True
    3     True
    4    False
    Name: INFO, dtype: bool
    

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多