删除数据帧的元素(如果它们位于列表中)



我请求你帮助我的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

我真的不明白它代表什么...

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

谢谢你的帮助。

也许这就是你想要的!

df.drop( df[ df['keyword'].apply(lambda x: x in list) ].index, inplace=True)

为什么有效?

您正在检查系列df['keyword']是否在列表list中。您要做的是检查系列xdf['keyword']中的元素是否在列表中list.因此,我们使用apply函数,它将给定函数"应用"到pandas SeriesDataFrame中的每个元素。

什么是λ?

Lambda 就像C中的内联函数。此使用函数的等效代码为:

def func(x):
return x in list
df.drop( df[ df['keyword'].apply(func)].index, inplace=True)

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

使用boolean indexing比使用apply高效得多。

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

注意:如果需要,请重置索引。

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

文档链接 -> isin/索引/选择数据

相关内容

  • 没有找到相关文章

最新更新