如果任何列包含关键字之一,则删除行

2024-03-28 17:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除任何列包含关键字的行

keywords=['Nokia' , 'Asus']

data = [['Nokia', 'AB123','broken'], ['iPhone', 'DF747','battery'], ['Acer', 'KH298','exchanged for a nokia'], ['Blackberry', 'jj091','exchanged for a Asus']] 
df = pd.DataFrame(data, columns = ['Brand', 'ID', 'Description']) 

前测向:

Brand      | ID    |  Description
----------------------------------------
Nokia      | AB123 | broken
iPhone     | DF747 | battery
Acer       | KH298 | exchanged for a nokia
Blackberry | jj091 | exchanged for a Asus

df后:

Brand      | ID    |  Description
----------------------------------------
iPhone     | DF747 | battery
Acer       | KH298 | exchanged for a nokia

我怎样才能做到这一点?你知道吗


Tags: idfordatadescriptioniphonebatterybrandnokia
2条回答
df = df[~(df.stack().str.contains('|'.join(keywords)).any(level=0))]

或者

df = df[~(df.astype(str).sum(axis=1).str.contains('|'.join(keywords)))]

输出

     Brand  ID      Description
1   iPhone  DF747   battery
2   Acer    KH298   exchanged for a nokia

您可以使用+apply将所有列连接在一起,然后使用|为regex OR创建具有连接值的^{}掩码:

df = df[~(df['Brand']+df['ID']+df['Description']).str.contains('|'.join(keywords))]

或:

df = df[~df.apply(' '.join, 1).str.contains('|'.join(keywords))]
print (df)
    Brand     ID            Description
1  iPhone  DF747                battery
2    Acer  KH298  exchanged for a nokia

如果需要不区分大小写的addcase参数:

df = df[~df.apply(' '.join, 1).str.contains('|'.join(keywords), case=False)]
print (df)
    Brand     ID Description
1  iPhone  DF747     battery

相关问题 更多 >