#python #regex #pandas #dataframe #contains
#python #регулярное выражение #pandas #фрейм данных #содержит
Вопрос:
У меня есть несколько строк в фрейме данных Pandas, например
df = pd.DataFrame({'Text':['k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium',
'k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum',
'k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum|t__GCF_000421365']})
Я хочу вернуть совпадающие g__
в конце строки, например, используя следующее регулярное выражение:
g__$
Я ожидаю получить этот результат:
k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium
Но исключите эти:
k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum
k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum|t__GCF_000421365
Комментарии:
1. Что-то вроде
"|g_.*$"
2. Используйте
|g__w*$
или|g__[^|]*$
. Является ли ввод фреймом данных? Почему вы говорите «строки»?3. Да, ввод является фреймом данных. Спасибо!
Ответ №1:
Вы можете использовать
df = df[df['Text'].str.contains(r'|g__[^|]*$')]
Совпадение |g__[^|]*$
регулярных |g__
выражений, а затем ноль или более символов, отличных от |
конца строки.
Смотрите демонстрацию регулярных выражений.
Тест Pandas:
import pandas as pd
df = pd.DataFrame({'Text':['k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium',
'k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum',
'k__Bacteria|p__Actinobacteria|c__Actinobacteria|o__Bifidobacteriales|f__Bifidobacteriaceae|g__Bifidobacterium|s__Bifidobacterium_pseudolongum|t__GCF_000421365']})
df = df[df['Text'].str.contains(r'|g__[^|]*$')]