【问题标题】:How to delete ANY row containing specific string in pandas?如何删除熊猫中包含特定字符串的任何行?
【发布时间】:2021-11-28 12:43:22
【问题描述】:

我知道在 python 的列中删除包含特定值的行有很多方法,但我想知道是否有更有效的方法来执行此操作,即一次检查数据集中的所有列并删除所有列包含特定值的行而不将其转换为 NaN 并删除所有这些值。澄清一下,我不想丢失所有带有字符串/NaN 的列,我只想丢失具有特定值的行。

例如,我希望删除所有列中包含答案“拒绝”的参与者的所有行。所以如果我的桌子看起来像这样:

Subject Race Gender Weight
1 black female 123
2 white refused 145
3 white male 165
4 asian male refused
5 refused male 128
6 white male nan
7 asian male refused
8 black male nan

我想实现一个语句,过滤它以仅保留没有任何响应且字符串包含“拒绝”的主题:

Subject Race Gender Weight
1 black female 123
3 white male 165
6 white male nan
8 black male nan

有谁知道如何通过这种方式过滤整个数据集?

【问题讨论】:

  • dropna 用于处理缺失值。
  • 您想完全匹配“拒绝”还是答案包含“拒绝”?

标签: python pandas filter multiple-columns


【解决方案1】:

您可以将isin 与any 一起使用。

df = df[~df.isin(['refused']).any(axis=1)]

【讨论】:

    【解决方案2】:

    apply-lambda 的另一种方法:

    df = df.loc[~df.apply(lambda row : any('refused' in str(cell) for cell in row) ,axis=1)]
    

    【讨论】:

      【解决方案3】:
      df = df[(df.Gender != 'refused') & (df.Race != 'refused').... ]
      

      或者

      filter = reduce(lambda column1, column2: (df[column1] != 'refused') & (df[column2] != 'refused'), df.columns)
      df = df[filter]
      

      【讨论】:

      • 我认为这个想法是“拒绝”可以出现在任何列中。基本上,这是一个缺失值。
      • @kwinkunks 查看更新
      猜你喜欢
      • 2018-12-12
      • 2017-02-12
      • 2015-04-25
      • 2022-11-27
      • 2017-11-16
      • 1970-01-01
      • 2011-02-25
      • 2021-03-17
      • 1970-01-01
      相关资源
      最近更新 更多