代码之家  ›  专栏  ›  技术社区  ›  Piyush S. Wanare

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

  •  2
  • Piyush S. Wanare  · 技术社区  · 8 年前

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

    假设我有以下数据帧:

    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 回复  |  直到 8 年前
        1
  •  7
  •   jezrael    8 年前

    对于筛选字符串:

    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 每行S:

    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
    

    至少测试一个 真 每行:

    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