Python 熊猫:删除任何列包含特定子字符串的所有行
以下是我的df: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]
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)
是必需的,非常感谢。效果非常好。