Skip to main content
 首页 » 编程设计

python之Pandas:根据包含特定值的字符串有效地子集 DataFrame

2025年05月04日19dudu

为了帮助说明我想要在这里实现的是一个名为 df 的 DataFrame:

column1  column2   
1        foo faa 
2        bar car 
3        dog dog 
4        cat rat 
5        foo foo 
6        bar cat 
7        bird rat 
8        cat dog 
9        bird foo 
10       bar car 

我想对 DataFrame 进行子集化 - 条件是如果 column2 中的字符串包含多个值之一,则删除行。

这对于单个值来说已经足够简单了,在本例中为“foo”:

df = df[~df['column2'].str.contains("foo")]

但假设我想删除 column2 中的字符串包含“cat”或“foo”的所有行。应用于上面的 df,这将删除 5 行。

执行此操作的最有效、最 pythonic 方法是什么?这可以是函数、多个 bool 值或其他我没有想到的形式。

isin 不起作用,因为它需要完全匹配。

注意:我已经编辑了这个问题,因为我在第一轮就犯了一个错误。抱歉。

请您参考如下方法:

使用isin测试值列表的成员资格并否定 ~ bool 掩码:

In [3]: 
vals = ['bird','cat','foo'] 
 
df[~df['column2'].isin(vals)] 
Out[3]: 
   column1 column2 
1        2     bar 
2        3     dog 
5        6     bar 
9       10     bar 
 
In [4]: 
df['column2'].isin(vals) 
 
Out[4]: 
0     True 
1    False 
2    False 
3     True 
4     True 
5    False 
6     True 
7     True 
8     True 
9    False 
Name: column2, dtype: bool