Как извлечь определенную букву n#s перед определенным шаблоном во фрейме данных в Python?

#python #regex #extract

Вопрос:

У меня есть столбец в фрейме данных, в котором перечислены последовательности ДНК, я хотел бы сделать следующие две вещи. Ниже приведен пример набора данных

 d = [['ampC','tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcAtcgccaatgtaaatccggcccgcc'], ['yifL','acttcataaagagtcgctaaacgcttgcttttacgtcttctcctgcgatgatagaaagcaGaaagcgatgaactttacaggcaat'],['glyW','tcaaaagtggtgaaaaatatcgttgactcatcgcgccaggtaagtagaatgcaacgcatcGaacggcggcactgattgccagacg']]
df = pd.DataFrame(d, columns = ['gene','Sequence'])
 
ген Последовательность
AmpC tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcAtcgccaatgtaaatccggcccgcc
yifL actttcataaagagtcgctaaacgcttgcttttacgtcttctcctgcgatgatagaaagcagaaagcgatgaactttacaggcaat
глиВ tcaaaagtggtgaaaaatatcgttgactcatcgcccaggtaagtagaatgcaacgcatcgaacggcggcactgattgccagacg
  1. Извлеките заглавную букву и все, что перед ней. С str.extract(r"(.*?)[A-Z] ", expand=True) помощью я могу получить все до заглавной буквы, но мне нужна помощь в том, чтобы понять, как также получить заглавную букву.

Пример того, что я пытаюсь получить для AmpC: tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcA

  1. Как извлечь 16 — ю букву перед заглавной буквой.

Пример того, что я пытаюсь получить для следующих 3 генов:

ген письмо
AmpC c
yifL g
глиВ t

[c, g, t]

Заранее благодарю вас за всю вашу помощь. Извините, если подобный вопрос задавался раньше, я нигде не мог найти решения.

Ответ №1:

Вы можете попробовать:

 df["SubSequence"] = df["Sequence"].str.extract(r'^(.*?[A-Z])')
df["letter"] = df["Sequence"].str.extract(r'^[acgt]*([acgt])[acgt]{15}[A-Z]')
 

Ответ №2:

Ваше регулярное выражение-это почти то, что вам нужно. Просто переместите заглавные буквы внутри группы. Попробуйте с:

 df["substring"] = df["Sequence"].str.extract(r"(.*?[A-Z])")[0]
df["letter"] = df["Sequence"].str.extract(r"(.*?[A-Z])")[0].str[-17]

>>> df[["gene", "letter"]]
   gene letter
0  ampC      c
1  yifL      g
2  glyW      t