Удалить строки из датафрейма, содержащие определённый текст
У меня есть датафрейм со столбцом df['Data'], содержащий в себе строки с текстом.
Наибольшее количество строк этого столбца содержат в себе одинаковую часть текста, но не все. Выглядит примерно так:
df['Data']
0 'AAAAA, dfdsfsdf'
1 'AAAAA, dffgthrtth'
2 'AAAAA, dfdfsfsf'
3 'AAAAA, dfwefwef'
4 'BBBBB, dfdsfsdf'
...
3487 'AAAAA, dfdwet34t'
Так вот, как мне удалить строки, не содержащие 'AAAAA, ' ?
Ответы (2 шт):
Предположим, есть датафрейм:
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
Другой вариант, нежели предложил человек выше :)
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()