Python 如果数据帧的元素在列表中,则删除它们
我向您寻求帮助,以获取我正在努力使用的Python脚本的一部分: 我有一个包含4列的数据框: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
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”,以便更容易理解。非常感谢您的帮助!