熊猫如何删除包含必需字符串的行

时间:2018-07-04 07:28:44

标签: python python-3.x pandas

我要删除所有包含必需字符串的行,

假设我有以下数据框:

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

1 个答案:

答案 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

要过滤子字符串,请使用containsapply

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