#python #regex #extract
Вопрос:
У меня есть столбец в фрейме данных, в котором перечислены последовательности ДНК, я хотел бы сделать следующие две вещи. Ниже приведен пример набора данных
d = [['ampC','tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcAtcgccaatgtaaatccggcccgcc'], ['yifL','acttcataaagagtcgctaaacgcttgcttttacgtcttctcctgcgatgatagaaagcaGaaagcgatgaactttacaggcaat'],['glyW','tcaaaagtggtgaaaaatatcgttgactcatcgcgccaggtaagtagaatgcaacgcatcGaacggcggcactgattgccagacg']]
df = pd.DataFrame(d, columns = ['gene','Sequence'])
ген | Последовательность |
---|---|
AmpC | tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcAtcgccaatgtaaatccggcccgcc |
yifL | actttcataaagagtcgctaaacgcttgcttttacgtcttctcctgcgatgatagaaagcagaaagcgatgaactttacaggcaat |
глиВ | tcaaaagtggtgaaaaatatcgttgactcatcgcccaggtaagtagaatgcaacgcatcgaacggcggcactgattgccagacg |
- Извлеките заглавную букву и все, что перед ней. С
str.extract(r"(.*?)[A-Z] ", expand=True)
помощью я могу получить все до заглавной буквы, но мне нужна помощь в том, чтобы понять, как также получить заглавную букву.
Пример того, что я пытаюсь получить для AmpC: tacggtctggctgctatcctgacagttgtcacgctgattggtgtcgttacaatctaacgcA
- Как извлечь 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