Python 删除多个列中包含字符串片段的所有行

Python 删除多个列中包含字符串片段的所有行,python,pandas,dataframe,slice,Python,Pandas,Dataframe,Slice,我有一个很大的数据框,有很多列。我想检查所有列并删除包含字符串'MU'的任何实例的任何行,有些列有'MU#1'或'MU#2',它们有时会切换位置(例如'MU#1将位于索引0的列1中,而'MU#2'将位于索引1的列1中)。最初,我尝试使用此方法删除它们,但如果我尝试对上面两个字符串执行此操作,则会变得太麻烦: df_slice = df[(df.phase_2 != 'MU#1') & (df.phase_3 != 'MU#1') & (df.phase_1 != 'MU#1')

我有一个很大的数据框,有很多列。我想检查所有列并删除包含字符串'MU'的任何实例的任何行,有些列有'MU#1'或'MU#2',它们有时会切换位置(例如'MU#1将位于索引0的列1中,而'MU#2'将位于索引1的列1中)。最初,我尝试使用此方法删除它们,但如果我尝试对上面两个字符串执行此操作,则会变得太麻烦:

df_slice = df[(df.phase_2 != 'MU#1') & (df.phase_3 != 'MU#1') & (df.phase_1 != 'MU#1') & (df.phase_4 != 'MU#1') ]
这可能行得通,但我必须用其他数据帧重复这个片段几次,我想有一个更简单的路径。我还有比上面显示的更多的列,但这只是一个片段。
简单地说,所有列都需要检查'MU',带有'MU'的行需要删除。谢谢

我们如何处理
all

df = df[df[['phase_1','phase_2','phase_3','phase_4']].ne('MU#1').all(1)]
更新

df = df[(~df[['phase_1','phase_2','phase_3','phase_4']].isin(['MU#1','MU#2'])).all(1)]

您还可以尝试
.str.contains()
并应用于数据帧。这避免了为以防万一而硬编码列

df[df.apply(lambda x: (~x.str.contains('MU', case=True, regex=True)))].dropna()

它是如何工作的s

选择1

df.apply()
中使用时,
x.str.contains
,#是datframe中包含

x.str.contains('MU',case=True,regex=True)
是datframe中包含'MU',区分大小写并隐含正则表达式的任何列的通配符

~
反转,因此您将得到没有MU的行

结果数据帧返回未满足条件的
NaN
.dropna()
因此消除了带有
NaN

选择2

df.stack()# Stacks the dataframe
df.stack().str.contains('MU')#boolean selects rows with the string 'MU'
df.stack().str.contains('MU').any(level=0)# Selects the index
~df.stack().str.contains('MU').any(level=0)# Reverses the selection taking only those without string 'MU'

非常感谢。除了同一行中的1个字符串之外,还有其他方法可以删除吗?例如,我现在想删除包含“MU#1”或“SIGMA”或“MU#2”的行@Austin检查更新~如果可以,是否接受它?>选中左侧的复选标记
df.stack()# Stacks the dataframe
df.stack().str.contains('MU')#boolean selects rows with the string 'MU'
df.stack().str.contains('MU').any(level=0)# Selects the index
~df.stack().str.contains('MU').any(level=0)# Reverses the selection taking only those without string 'MU'