在Pandas数据框中根据多个条件删除行

33

我的df有3列

df = pd.DataFrame({"col_1": (0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0), 
                   "col_2": (0.0, 0.24, 1.0, 0.0, 0.22, 3.11, 0.0),
                    "col_3": ("Mon", "Tue", "Thu", "Fri", "Mon", "Tue", "Thu")}) 

我想删除 df.col_1 等于 1.0 和 df.col_2 等于 0.0 的行。 所以,我会得到:

df = pd.DataFrame({"col_1": (0.0, 0.0, 1.0, 0.0, 1.0), 
                   "col_2": (0.0, 0.24, 1.0, 0.22, 3.11),
                    "col_3": ("Mon", "Tue", "Thu", "Mon", "Tue")})

我尝试过:

df_new = df.drop[df[(df['col_1'] == 1.0) & (df['col_2'] == 0.0)].index]

它给我报错:

'method' object is not subscriptable

有什么想法可以解决上述问题吗?

6个回答

60

drop 是一个方法,你使用 [] 调用它,这就是为什么它会给你这样的结果:

'method' object is not subscriptable

改为()(普通方法调用),然后它应该可以工作:

import pandas as pd

df = pd.DataFrame({"col_1": (0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0),
                   "col_2": (0.0, 0.24, 1.0, 0.0, 0.22, 3.11, 0.0),
                   "col_3": ("Mon", "Tue", "Thu", "Fri", "Mon", "Tue", "Thu")})

df_new = df.drop(df[(df['col_1'] == 1.0) & (df['col_2'] == 0.0)].index)
print(df_new)

输出

   col_1  col_2 col_3
0    0.0   0.00   Mon
1    0.0   0.24   Tue
2    1.0   1.00   Thu
4    0.0   0.22   Mon
5    1.0   3.11   Tue

仅为补充此答案:& 是逻辑 AND 运算符,| 是逻辑 OR 运算符,而 ~ 则是逻辑 NOT 运算符。 - Daniel Lavedonio de Lima
为什么需要在末尾使用.index方法?我发现如果没有它,代码就无法正常运行。 - Yogesh Riyat
为什么需要在末尾使用.index方法?我发现如果没有它,它就无法正常工作。 - undefined

19

尝试使用loc过滤您的df。它非常强大!"~" 表示您想保留与条件相反的内容。":" 表示您想保留所有列。

df = df.loc[~((df['col_1'] == 1.0) & (df['col_2'] == 0.0)),:]

10

"|" 运算符用于“或”条件,而 "&" 运算符用于“与”条件。我认为这里需要的是 & 运算符。 - Web Ster

9
mask = df['Product_Code'].isin(['filter1', 'filter2', 'filter3'])
df = df[~mask]
df.head()

.isin() 可以根据一个序列中的多个值来过滤整个数据框,相比我所知道的其他解决方案,它需要编写的代码最少。

在按列进行筛选时,添加 ~ 将翻转 isin() 的逻辑。


1
将要删除的行的位置放在“location”处。
df = df.drop(['location' axix=1, inplace=True]

0

你也可以在这里使用 查询

In [4]: df.query('~(col_1 == 1 & col_2 == 0)')
Out[4]: 
   col_1  col_2 col_3
0    0.0   0.00   Mon
1    0.0   0.24   Tue
2    1.0   1.00   Thu
4    0.0   0.22   Mon
5    1.0   3.11   Tue

使用~可以对查询进行否定,返回那些不满足条件col_1 == 1 & col_2 == 0的观测数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接