我的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")})
Run Code Online (Sandbox Code Playgroud)
我想删除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")})
Run Code Online (Sandbox Code Playgroud)
我试过了:
df_new = df.drop[df[(df['col_1'] == 1.0) & (df['col_2'] == 0.0)].index]
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
'method' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决上述问题?
Cha*_*s R 10
尝试使用 loc 过滤您的 df。太强大了 “~”表示您想要与您的条件相反的内容。“:”表示您要保留所有列
df = df.loc[~((df['col_1'] == 1.0) & (df['col_2'] == 0.0)),:]
Run Code Online (Sandbox Code Playgroud)
小智 9
mask = df['Product_Code'].isin(['filter1', 'filter2', 'filter3'])
df = df[~mask]
df.head()
Run Code Online (Sandbox Code Playgroud)
.isin()允许您根据系列中的多个值过滤整个数据框。与我所知道的其他解决方案相比,这是需要编写的代码量最少的。
添加~按列过滤器内部会颠倒 的逻辑isin()。
您可以为此使用或 (|) 运算符,请参阅此链接熊猫:索引数据框时的多个条件 - 意外行为
即删除满足两个条件的行
df = df.loc[~((df['col_1']==1) | (df['col_2']==0))]
Run Code Online (Sandbox Code Playgroud)
drop是一种方法,您正在使用调用它[],这就是为什么它为您提供了:
'method' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
更改为()(正常方法调用),它应该可以工作:
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)
Run Code Online (Sandbox Code Playgroud)
输出量
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12914 次 |
| 最近记录: |