Python 熊猫:删除任何列包含特定子字符串的所有行

Python 熊猫:删除任何列包含特定子字符串的所有行,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,以下是我的df: In [1531]: df = pd.DataFrame({'A':['a','a','a','a','a','a'], 'B':['all::1::all','all::1::all', '100::1::2', 'm::1::a','all::1::all','c::1::29'], 'C':['0::1::1', '0::1::1', '0::1::1','0::1::1', 'all::1::all', 'all::1::all'], 'D':[1,2,3,4,5,6]

以下是我的df:

In [1531]: df = pd.DataFrame({'A':['a','a','a','a','a','a'], 'B':['all::1::all','all::1::all', '100::1::2', 'm::1::a','all::1::all','c::1::29'], 'C':['0::1::1', '0::1::1', '0::1::1','0::1::1', 'all::1::all', 'all::1::all'], 'D':[1,2,3,4,5,6]})

In [1532]: df
Out[1532]: 
   A            B            C  D
0  a  all::1::all      0::1::1  1
1  a  all::1::all      0::1::1  2
2  a    100::1::2      0::1::1  3
3  a      m::1::a      0::1::1  4
4  a  all::1::all  all::1::all  5
5  a     c::1::29  all::1::all  6
我想从
df
中删除所有行,这些行包含任何列中的子字符串
all

我可以有任意数量的列,因此需要一个通用的解决方案,而不必在所有列上循环。

预期产出:

In [1534]: df[~df.B.str.contains('all') & ~df.C.str.contains('all')]
Out[1534]: 
   A          B        C  D
2  a  100::1::2  0::1::1  3
3  a    m::1::a  0::1::1  4
用于选择所有字符串列,替换可能缺少的值,添加分隔符以区分列的末尾字符串,用于连接在一起的
sum
,最后一次使用时使用的是
~

df = (df[~df.select_dtypes(object)
            .fillna('')
            .astype(str)
            .add('|')
            .sum(axis=1)
            .str.contains('all')])
print (df)
   A          B        C  D
2  a  100::1::2  0::1::1  3
3  a    m::1::a  0::1::1  4

数据帧({'A':[1,2,3],'B':['all',1,2],'C':[2,'all',am'])失败。。错误是:
不支持+:'int'和'str'的操作数类型
@MayankPorwal-我知道,某些列中存在混合类型,因此
。astype(str)
是必需的,非常感谢。效果非常好。