Предоставление DataFrame, подобного этому, состоящего из более чем 10 тыс. Записей:
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
Я хочу заменить любое N в столбце Recognition Sequence
с помощью выражения регулярного выражения, которое заменит 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]
. Это то, что я делал со своим кодом.