用正则表达式替换满足正则表达式条件时更新熊猫值

时间:2019-10-20 11:29:53

标签: python-3.x pandas numpy scipy

提供一个这样的DataFrame,该DataFrame由超过1万条记录组成:

    RecSeq Length   Recognition Sequence    Enzymes
4023    12  CCANNNNNNTGG    BstXI
4024    12  CGANNNNNNTCC    HdeNY26I
4025    12  CGANNNNNNTGC    BcgI
4026    12  GAACNNNNNCTC    PpiI
4027    12  GAAGNNNNNCTC    Mcr10I
4028    12  GACNNNNNNGTC    AasI
4029    12  GACNNNNNNGTC    DrdI
4030    12  GACNNNNNNGTC    DseDI

我想使用正则表达式替换Recognition Sequence列下的所有N,它将用N替换[A|C|G|T]。当前,我正在通过iterrows来实现此目的,方法是在一个新颖的数据帧内添加每条记录(else条件将行保持原样,因此未在其中包含其代码)。方法如下:

new_df = []
    for idx, i in df.iterrows():
        if re.search('N', i[1]) != None:
            value = str(i[1])
            updated = value.replace('N', '[A|C|G|T]')
            whole_line = str(updated +','+ i[2],+','+i[0])
            new_df.append(whole_line)
            df1  = pd.DataFrame(new_df)

这种方法似乎很慢,因为它会遍历每个元素,而且我知道,迭代始终是处理大熊猫时遵循的最后一种方法。我想实现一个np.where,如在其他问题中所解释的那样,或者更通用或更强大的东西。

是的,应将每个N替换为[A|C|G|T]。这就是我对代码所做的事情。

1 个答案:

答案 0 :(得分:0)

df = pd.DataFrame({"A":['CCANNNNNNTGG']})

df
        A
0   CCANNNNNNTGG

import re
def my_func(x):
    return re.sub(r'N', [A|C|G|T], x)

df['A'] = df.A.apply(my_func)

df
0    CCA[A|C|G|T][A|C|G|T][A|C|G|T][A|C|G|T][A|C|G|T][A|C|G|T]TGG
Name: A, dtype: object