【发布时间】:2019-10-20 11:29:53
【问题描述】:
提供一个像这样的 DataFrame,由超过 10k 条记录组成:
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,这将用 [A|C|G|T] 替换 N。目前,我正在使用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)
这种方法看起来很慢,因为它遍历每个元素,而且我知道在处理 pandas 时,迭代始终是最后一种方法。我想实现一个np.where,正如其他问题或更通用或更强大的东西所解释的那样。
是的,每个N 都应该替换为[A|C|G|T]。这就是我对代码所做的事情。
【问题讨论】:
-
所以如果字符串中存在 10 个
N,您想添加 10 次[A|C|G|T]吗?例如CGNNNT将更改为CG[A|C|G|T][A|C|G|T][A|C|G|T]T。还有N是什么不一起出现,比如CGNTN,那你要什么输出呢? -
您能否也发布您的预期输出,这样我们就不必猜测您到底想要什么。
标签: python-3.x pandas numpy scipy