我要删除所有包含必需字符串的行,
假设我有以下数据框:
A B C
1 a x
w g n
3 l p
j p v
我想删除所有包含字符串p
的行。我已经搜索了它,但是大多数答案是基于列名的,对于我而言,我不会意识到它可以出现在任何列中。
输出数据框应为
A B C
1 a x
w g n
答案 0 :(得分:7)
用于过滤字符串:
df = df[(df != 'p').all(axis=1)]
比较不等于:
print ((df != 'p'))
A B C
0 True True True
1 True True True
2 True True False
3 True False True
并测试每行所有True
:
print ((df != 'p').all(axis=1))
0 True
1 True
2 False
3 False
dtype: bool
或者:
df = df[~(df == 'p').any(axis=1)]
测试是否相等:
print ((df == 'p'))
A B C
0 False False False
1 False False False
2 False False True
3 False True False
每行至少测试一个True
:
print ((df == 'p').any(axis=1))
0 False
1 False
2 True
3 True
dtype: bool
反转布尔掩码:
print (~(df == 'p').any(axis=1))
0 True
1 True
2 False
3 False
dtype: bool
要过滤子字符串,请使用contains
和apply
:
df = df[~df.apply(lambda x: x.astype(str).str.contains('p')).any(axis=1)]
或者:
df = df[~df.stack().astype(str).str.contains('p').unstack().any(axis=1)]
print (df)
A B C
0 1 a x
1 w g n