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

时间:2020-10-07 08:32:03

标签: 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]})

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

1 个答案:

答案 0 :(得分:2)

使用DataFrame.select_dtypes选择所有字符串列,替换可能的缺失值,添加分隔符以区分列末尾字符串,sum用于连接在一起,最后将Series.str.contains与反掩码一起使用{ {1}}:

~