Для удаления строк
Создайте маску, которая возвращает True или False в зависимости от того, содержит ли эта ячейка ваши строки
search_for = ["s", "John"]
mask = data.applymap(lambda x: any(s in str(x) for s in search_for))
Затем используйте фильтр .any для проверкипо крайней мере, одно значение True на строку с логическим индексированием и принимать только те строки, где True не найдено.
df_filtered = df[~mask.any(axis=1)]
Для удаления столбцов
search_for = ["s", "John"]
mask = data.applymap(lambda x: any(s in str(x) for s in search_for))
axis = 0вместо 1, чтобы проверить для каждого столбца:
columns_analysis = mask.any(axis=0)
получить индексы, когда True для сброса
columns_to_drop = columns_analysis[columns_analysis == True].index.tolist()
df_filtered = data.drop(columns_to_drop, axis=1)