簡體   English   中英

Pandas:刪除任何列包含某個子字符串的所有行

[英]Pandas: Remove all rows where any of the column contains a certain substring

下面是我的 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

使用DataFrame.select_dtypes選擇所有字符串列,替換可能的缺失值,添加分隔符以區分列尾字符串, sum連接在一起,最后使用Series.str.contains~反轉掩碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM