【问题标题】:If row in Dataframe contains certain string delete如果 Dataframe 中的行包含某些字符串删除
【发布时间】:2019-09-14 17:10:53
【问题描述】:

如果数据框的行中包含某个字符串,我必须删除它们。 问题是行很长并且包含文本。

循环不起作用并将索引放入列表中,然后在索引上使用 .drop 也不起作用。

column1
8
8
8
8 total       <-------- This must be deleted
8
8 
8 
8
8
...

谢谢

【问题讨论】:

标签: python pandas python-2.7 numpy


【解决方案1】:

假设您的数据框名为df。然后使用:

df_filtered = df[~df['column1'].str.contains('total')]

说明

df['column1'].str.contains('total') 将为您提供一个数据框列的长度数组,即True,无论df['column1'] 包含'total'。使用~,您可以交换此数组的TrueFalse 值。最后,df_filtered = df[...] 只包含行,'total' 不包括在内。

【讨论】:

  • 如果您不关心大小写,可以在语句中添加“case = False”。您可能还需要添加 'na = False' ,以防列中有一些 nas。 df[~df['column1'].str.contains('total', case = False, na = False)]
【解决方案2】:

如果我理解正确,我在下面有一个小例子,其中 dataFrame 被称为 df,我想删除 mixfruit 以进行搜索和删除。

>>> df
       name  num
0     apple    5
1    banana    3
2  mixfruit    5
3    carret    6

一种方法是其他提到的可以使用str.contains,如下所示..

>>> df[~df.name.str.contains("mix")]
     name  num
0   apple    5
1  banana    3
3  carret    6

你也可以使用isin,它会删除所有包含字符串的行

>>> df[~df['name'].isin(['mixfruit'])]
     name  num
0   apple    5
1  banana    3
3  carret    6

但是,您可以实现以下相同...

>>> df[df['name'] != 'mixfruit']
     name  num
0   apple    5
1  banana    3
3  carret    6

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2017-03-18
    • 2019-06-17
    • 2021-04-07
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多