【问题标题】:Pandas - Python drop rows if Column contains multiples criteriaPandas - 如果 Column 包含多个条件,则 Python 删除行
【发布时间】:2019-08-01 07:46:29
【问题描述】:

我正在尝试删除 Vndr 列中不包含“HW”或“CA”的行。这是我的代码:

data.drop(data[data.Vndr != 'HW' or 'CA'].index)

我收到此错误“ValueError:系列的真值不明确。请使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用isin

    data.loc[~data.Vndr.isin([ 'HW' , 'CA']),]
    

    【讨论】:

      【解决方案2】:

      可以使用

      data[data.Vndr.str.contains('HW|CA'])
      

      一般方法

      s="|".join(['HW', 'CA'])
      data[data.Vndr.str.contains(s)
      

      【讨论】:

        【解决方案3】:

        确实需要

        ... or data.Vndr != ‘CA’
        

        否则没有意义

        【讨论】:

        • 所以我输入了以下代码: data.drop(data[data.Vndr != 'HW' or data.Vndr != 'CA'].index) & 得到了同样的错误 - 我是不是错过一些东西
        • 在 [] 索引中,您需要在每个二进制操作周围放置 ():[(data.Vndr != 'HW') 或 (data.Vndr != 'CA')]。另一种解决方法是使用 Series.eq() 和 Series.ne()。 [(data.Vndr.ne('HW') 或 (data.Vndr.ne('CA')]。最后,你可以使用 [~data.Vndr.isin(['HW', 'CA'])]其中波浪号否定 Vndr 上的布尔索引。
        【解决方案4】:

        您可以对没有此类关键字的行进行子集化,而不是删除此类行。
        你可以这样工作:

        data = data[(data['Vndr'] != 'CA') | (data['Vndr'] != 'HW')]
        

        【讨论】:

          猜你喜欢
          • 2022-01-13
          • 2019-06-17
          • 1970-01-01
          • 1970-01-01
          • 2020-09-08
          • 1970-01-01
          • 1970-01-01
          • 2018-08-18
          • 1970-01-01
          相关资源
          最近更新 更多