Python 如果数据帧的元素在列表中,则删除它们

Python 如果数据帧的元素在列表中,则删除它们,python,pandas,list,dataframe,compare,Python,Pandas,List,Dataframe,Compare,我向您寻求帮助,以获取我正在努力使用的Python脚本的一部分: 我有一个包含4列的数据框: keyword impressions clicks ctr 0 About 1.0 0.0 0.000000 1 Achat 12.0 2.0 16.6666667 2 Action 1.0 0.0 0.000000

我向您寻求帮助,以获取我正在努力使用的Python脚本的一部分: 我有一个包含4列的数据框:

           keyword  impressions  clicks   ctr
0            About          1.0     0.0    0.000000
1            Achat         12.0     2.0    16.6666667
2           Action          1.0     0.0    0.000000
3            Adele         14.0     1.0    7.14285714
此数据帧包含数千行。如果“关键字”在列表中(例如:list={'Action','About}),我试图从这个数据帧中删除行

以下是我编写的代码行:

df.drop( df[ df['keyword'] in list ].index, inplace=True)
但我得到了这个错误:

File "/Users/adamn/Desktop/test_lambda.py", line 87, in <module>
 df.drop( df[ df['keyword'] in exc ].index, inplace=True)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site- 
 packages/pandas/core/generic.py", line 1785, in __hash__
raise TypeError(
TypeError: 'Series' objects are mutable, thus they cannot be hashed
文件“/Users/adamn/Desktop/test_lambda.py”,第87行,在
drop(df[df['keyword']在exc].index中,inplace=True)
文件“/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-
packages/pandas/core/generic.py”,第1785行,在散列中__
提高打字错误(
TypeError:“Series”对象是可变的,因此无法对其进行散列
我真的不明白它代表什么

我如何解决它?或者我应该如何处理以获得我想要的结果


谢谢你的帮助。

也许这就是你想要的

df.drop( df[ df['keyword'].apply(lambda x: x in list) ].index, inplace=True)
它为什么有效? 您正在检查序列
df['keyword']
是否在列表
list
中。您所要做的是检查序列
df['keyword']
中的元素
x
是否在列表
list
中。因此,我们使用了“应用”的
apply
函数为
系列
数据帧
中的每个元素指定的函数

什么是lambdas? lambda类似于
C
中的内联函数。使用函数的等效代码为:

def func(x):
    return x in list

df.drop( df[ df['keyword'].apply(func)].index, inplace=True)

PS:我建议不要使用'list'作为变量名,因为它在python中是一种数据类型。

使用
布尔索引
比使用
应用
更有效

df = df.loc[~df.keyword.isin(['About', 'Action'])]
注意:如果需要,请重置索引

df = df.loc[~df.keyword.isin(['About', 'Action'])].reset_index()

文档链接->/

是的,这正是我想要的,但我对熊猫中的lambdas不是很熟悉,所以我没有考虑。是的,我的列表有一个不同的名称,我只是在这里将其命名为“list”,以便更容易理解。非常感谢您的帮助!