如何删除 pandas 中包含特定字符串的任何行?

How to delete ANY row containing specific string in pandas?

我知道有很多方法可以删除 python 中列中包含特定值的行,但我想知道是否有更有效的方法通过检查列中的所有列来执行此操作立即删除数据集并删除所有包含特定值的行,而不将其转换为 NaN 并删除所有行。澄清一下,我不想丢失所有带有 strings/NaN 的列,我只想丢失具有特定值的行。

例如,我希望删除参与者在任何列中包含“拒绝”答案的所有行。所以如果我的 table 看起来像这样:

Subject Race Gender Weight
1 black female 123
2 white refused 145
3 white male 165
4 asian male refused
5 refused male 128
6 white male nan
7 asian male refused
8 black male nan

我想实现一个语句来过滤它,只保留没有任何响应的主题,字符串包含“拒绝”:

Subject Race Gender Weight
1 black female 123
3 white male 165
6 white male nan
8 black male nan

有谁知道如何以这种方式过滤整个数据集?

df = df[(df.Gender != 'refused') & (df.Race != 'refused').... ]

或者

filter = reduce(lambda column1, column2: (df[column1] != 'refused') & (df[column2] != 'refused'), df.columns)
df = df[filter]

另一种应用 lambda 的方法:

df = df.loc[~df.apply(lambda row : any('refused' in str(cell) for cell in row) ,axis=1)]

您可以将 isinany 一起使用。

df = df[~df.isin(['refused']).any(axis=1)]