提供一个这样的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]
。这就是我对代码所做的事情。
答案 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