如何使用 Pandas 删除包含特定字符串的任何行?

4
我知道在Python中有许多删除包含特定列值的行的方法,但我想知道是否有更有效的方法通过一次检查数据集中的所有列并删除所有包含特定值的行而不将其转换为NaN并删除所有行。澄清一下,我不想失去所有字符串/NaN列,只想失去具有特定值的行。
例如,我想删除所有参与者答案中包含任何列中的"拒绝"答案的行。那么,如果我的表格如下所示:
我想要实现一个语句,它将过滤掉只保留没有包含“refused”字符串的响应的主题:
主题 种族 性别 重量
1 黑人 女性 123
3 白人 男性 165
6 白人 男性
8 黑人 男性

请问有谁知道如何在整个数据集上进行此类筛选?


dropna 是用于处理缺失值的函数。 - Matt Hall
你想要精确匹配“refused”还是只要答案包含“refused”? - kubatucka
3个回答

3
你可以在任何地方使用isin
df = df[~df.isin(['refused']).any(axis=1)]

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

或者

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

1
我认为这个想法是,“拒绝”可以出现在任何一列中。基本上它是一个缺失值。 - Matt Hall
@kwinkunks 请查看更新 - Tarik

-2

使用apply-lambda的另一种方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接