Панды Как удалить строки, содержащие необходимую строку - PullRequest
0 голосов
/ 04 июля 2018

Я хочу удалить все строки, содержащие требуемую строку,

Предположим, у меня есть следующий фрейм данных:

A    B    C
1    a    x
w    g    n
3    l    p
j    p    v

Я хочу удалить все строки, содержащие строку p. У меня есть поиск, но большая часть ответа основана на имени столбца, в моем случае я не буду знать о столбце, который может присутствовать в любом из столбцов.

Выходной кадр данных должен быть

A    B    C
1    a    x
w    g    n

1 Ответ

0 голосов
/ 04 июля 2018

Для фильтрации строк:

df = df[(df != 'p').all(axis=1)]

Сравнить для не равных:

print ((df != 'p'))
      A      B      C
0  True   True   True
1  True   True   True
2  True   True  False
3  True  False   True

И проверка для всех True с в строке:

print ((df != 'p').all(axis=1))
0     True
1     True
2    False
3    False
dtype: bool

Или:

df = df[~(df == 'p').any(axis=1)]

Тест на равенство:

print ((df == 'p'))
       A      B      C
0  False  False  False
1  False  False  False
2  False  False   True
3  False   True  False

Проверка хотя бы одного True на строку:

print ((df == 'p').any(axis=1))
0    False
1    False
2     True
3     True
dtype: bool

Инвертировать логическую маску:

print (~(df == 'p').any(axis=1))
0     True
1     True
2    False
3    False
dtype: bool

Для фильтрации подстрок используйте contains с apply:

df = df[~df.apply(lambda x: x.astype(str).str.contains('p')).any(axis=1)]

Или:

df = df[~df.stack().astype(str).str.contains('p').unstack().any(axis=1)]

print (df)
   A  B  C
0  1  a  x
1  w  g  n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...