Python:基于模式创建多个新列

时间:2018-09-13 10:52:18

标签: python

我有一个像这样的文件:

#chr    start   end count   colX    colY
1   100 200 1       
1   300 400 2   blabla_pattern_a,blabla_pattern_b,blabla_pattern_c
2   100 400 1   blabla_pattern_a    
2   500 600 4   blabla_pattern_e,blabla_pattern_c   blabla_pattern_d

我正在寻找colXcolY中可能存在的5种不同模式(a-e)。在某些情况下,ColX和/或ColY也可以为空。基于这些模式的存在/不存在,我想创建5个不同的列,其值分别为XYNA,如下所示:

#chr    start   end count   pattern_a   pattern_b   pattern_c   pattern_d   pattern_e   
1   100 200 1   NA  NA  NA  NA  NA  
1   300 400 2   X   X   X   NA  NA
2   100 400 1   Y   NA  NA  NA  NA
2   500 600 4   NA  NA  X   Y   X

我知道如何为一种模式进行此操作,但是我需要帮助才能有效地针对多种模式进行此操作。到目前为止,这是我的代码-适用于一种模式:

   #!/usr/bin/env python
   import csv
   import sys
   input_file = sys.argv[1]
   with open(input_file, 'rU') as f:
       data = csv.reader(f,delimiter='\t')
       a=[]
       for row in data:
           if "pattern_a" in row[4]:
               a = "X"
           elif "pattern_a" in row[5]:
               a = "Y"
           else:
               a = "NA"
           print (row,a)

1 个答案:

答案 0 :(得分:0)

类似的方法可能有用:

import csv
import sys

input_file = sys.argv[1]
patterns = ['pattern_a', 'pattern_b', 'pattern_c', 'pattern_d', 'pattern_e']

with open(input_file, 'rU') as f:
    data = csv.reader(f,delimiter='\t')

    for row in data:
        a=[]
        for pattern in patterns:
            if pattern in row[4]:
                a.append("X")
            elif pattern in row[5]:
                a.append("Y")
            else:
                a.append("NA")
        print (a)

此输出为:

['NA', 'NA', 'NA', 'NA', 'NA']
['X', 'X', 'X', 'NA', 'NA']
['X', 'NA', 'NA', 'NA', 'NA']
['NA', 'NA', 'X', 'Y', 'X']