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

12 浏览
0 Comments

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

我的数据框有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'对象不可索引

有什么办法解决上述问题吗?

0
0 Comments

在处理pandas dataframe时,有时候我们需要根据多个条件删除行。这种情况下,我们可以使用pandas的loc功能进行筛选。

要删除满足多个条件的行,我们可以使用"~"符号来表示我们想要保留与条件相反的行。同时,使用":"表示我们想要保留所有列。

下面的代码展示了如何使用loc来删除满足多个条件的行:

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

在上述代码中,我们首先通过使用"=="操作符来判断列"col_1"是否等于1.0,并且列"col_2"是否等于0.0。然后使用"&"操作符将两个条件连接起来,使用"~"操作符取反。最后,将筛选结果赋值给df,即可删除满足条件的行。

通过这种方式,我们可以方便地删除满足多个条件的行。这种方法非常强大,并且可以在处理pandas dataframe时非常有用。

0
0 Comments

原因:在pandas中,当我们需要根据多个条件删除行时,使用单个条件的drop方法无法满足需求。

解决方法:可以使用pandas的"|"运算符来实现。具体方法如下:

1. 首先,我们可以参考stackoverflow上的这个链接:pandas: multiple conditions while indexing data frame - unexpected behavior

2. 使用以下代码来删除满足两个条件的行:

df = df.loc[~((df['col_1']==1) | (df['col_2']==0))]

3. 其中,"~"表示取反操作,即删除满足条件的行。

值得注意的是,"|"运算符表示"OR"条件,而"&"运算符表示"AND"条件。在这里,我们需要使用"&"运算符来满足需求。

0
0 Comments

问题的出现原因是因为在调用drop方法时使用了方括号[]。drop是一个方法,应该使用圆括号()进行调用。解决方法是将方括号[]改为圆括号(),然后调用drop方法。

代码示例:

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

补充说明:&是逻辑与运算符,|是逻辑或运算符,~是逻辑非运算符。

为什么需要在最后使用.index方法?我发现如果没有使用它,代码将无法正常运行。

0