Удалить строки из датафрейма, содержащие определённый текст

У меня есть датафрейм со столбцом df['Data'], содержащий в себе строки с текстом.

Наибольшее количество строк этого столбца содержат в себе одинаковую часть текста, но не все. Выглядит примерно так:

df['Data']
0    'AAAAA, dfdsfsdf'
1    'AAAAA, dffgthrtth'
2    'AAAAA, dfdfsfsf'
3    'AAAAA, dfwefwef'
4    'BBBBB, dfdsfsdf'
           ...
3487 'AAAAA, dfdwet34t'

Так вот, как мне удалить строки, не содержащие 'AAAAA, ' ?


Ответы (2 шт):

Автор решения: strawdog

Предположим, есть датафрейм:

import pandas as pd
import numpy as np

df = pd.DataFrame({"Data": ['AAAAA, dfdsfsdf', 'AAAAA, dffgthrtth', 'AAAAA, dfdfsfsf', 'AAAAA, dfwefwef', 'BBBBB, dfdsfsdf']})
                Data
0    AAAAA, dfdsfsdf
1  AAAAA, dffgthrtth
2    AAAAA, dfdfsfsf
3    AAAAA, dfwefwef
4    BBBBB, dfdsfsdf

с решение вашего вопроса все просто. однако не ясно, как вы будете определять подстроку, чаще всего встречающуюся. поэтому предложу решение с модой, например:

df_unique = np.ravel([x.split(", ") for x in df["Data"].unique()]).tolist()
df_mode = max(set(df_unique), key=df_unique.count)

теперь просто отсеиваем (это и есть решение вашего вопроса, вместо df_mode можно подставить любую подстроку):

res = df[df["Data"].str.contains(df_mode)]

получаем res:

                Data
0    AAAAA, dfdsfsdf
1  AAAAA, dffgthrtth
2    AAAAA, dfdfsfsf
3    AAAAA, dfwefwef
→ Ссылка
Автор решения: Exord

Другой вариант, нежели предложил человек выше :)

df = pd.DataFrame({"Data": ['AAAAA, dfdsfsdf', 'AAAAA, dffgthrtth', 'AAAAA, dfdfsfsf', 'AAAAA, dfwefwef', 'BBBBB, dfdsfsdf']})
nonned_df = df.applymap(lambda x: x if 'AAAAA' in x else None)
new_df = nonned_df.dropna()

Смысл в том, что мы помечаем как None все ячейки, где нет "AAAAA", а после просто удаляем строки с None через dropna()

→ Ссылка