[英]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.