Pandas如何删除包含所需字符串的行

Piy*_*are 2 python python-3.x pandas

我想删除包含所需字符串的所有行,

假设我有以下数据帧:

A    B    C
1    a    x
w    g    n
3    l    p
j    p    v
Run Code Online (Sandbox Code Playgroud)

我想删除包含字符串的所有行p.我已经搜索了它,但大多数答案是基于列名称,在我的情况下,我不会知道列可以出现在任何列中.

输出数据帧应该是

A    B    C
1    a    x
w    g    n
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

用于过滤字符串:

df = df[(df != 'p').all(axis=1)]
Run Code Online (Sandbox Code Playgroud)

比较不相等:

print ((df != 'p'))
      A      B      C
0  True   True   True
1  True   True   True
2  True   True  False
3  True  False   True
Run Code Online (Sandbox Code Playgroud)

并测试True每行的所有s:

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

要么:

df = df[~(df == 'p').any(axis=1)]
Run Code Online (Sandbox Code Playgroud)

测试平等:

print ((df == 'p'))
       A      B      C
0  False  False  False
1  False  False  False
2  False  False   True
3  False   True  False
Run Code Online (Sandbox Code Playgroud)

True每行测试至少一个:

print ((df == 'p').any(axis=1))
0    False
1    False
2     True
3     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

反转布尔掩码:

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

对于过滤子使用containsapply:

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

要么:

df = df[~df.stack().astype(str).str.contains('p').unstack().any(axis=1)]
Run Code Online (Sandbox Code Playgroud)
print (df)
   A  B  C
0  1  a  x
1  w  g  n
Run Code Online (Sandbox Code Playgroud)