【问题标题】:Pandas: Delete Row if cell contains specific textPandas:如果单元格包含特定文本,则删除行
【发布时间】:2020-06-16 17:41:02
【问题描述】:

pandas 中的这段代码不起作用。如果该列包含提供的任何文本/数字,我希望它删除该行目前,如果单元格与我的代码中传递的确切文本匹配,我只能让它工作。因为它只删除说 Fin* 的单元格不是金融或金融...

df2 = df[df.Team != 'Fin*']

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用startswith

    df[~df.Team.str.startswith('Fin')]
    

    或者

    df[~df.Team.str.contains('Fin')]
    

    【讨论】:

    • @pes04 yw :-) happu 编码
    • 为什么需要包含:~ 在 df 之前才能工作?
    • @pes04 既然你提到你需要,而不是包括,我们只是使用 ~ 这意味着取消选择
    【解决方案2】:
    import pandas as pd
    df = pd.DataFrame(dict(A=[1,2,3,4], C=["abc","def","abcdef", "lmn"]))
    
    df:
    
        A   C
    0   1   abc
    1   2   def
    2   3   abcdef
    3   4   lmn
    
    df[df.C.str.contains("abc") == False]
    

    或如@RafaelC 建议的那样

    df[~df.C.str.contains("abc")]
    

    输出:

        A   C
    1   2   def
    3   4   lmn
    

    【讨论】:

    • ~df.C.str.contains("abc")
    【解决方案3】:

    此操作需要正则表达式。这是一个合成数据框:

    df = pd.DataFrame({'Team': ['Finance', 'Finally', 'Foo']})
    

    这是一个没有 (~) 的数据框:

    df[~df.Team.str.match('Fin*')]
    #  Team
    #2  Foo
    

    如果您确定感兴趣的字符串总是以 Fin 开头,则可以使用“更柔和”的方法:

    df[~df.Team.str.startswith('Fin')]
    #  Team
    #2  Foo
    

    【讨论】:

    • 如果你想删除一行,你会怎么做,通过一个整数的特定列值 - 所以我们在上面使用的 'Fin*' 删除了列值为 3.5 的行和 inversley 我们将如何删除任何不包含特定 int 的行。还是字符串?
    【解决方案4】:

    * 被解释为regex。由于这不是您想要的,您可以通过 \

    转义 *
    df2 = df[df.Team != 'Fin\*']
    

    或者干脆使用

    df2 = df[~dfTeam.str.contains('Fin')]
    

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多