我请求你帮助我的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
中。您要做的是检查系列x
df['keyword']
中的元素是否在列表中list
.因此,我们使用apply
函数,它将给定函数"应用"到pandas Series
或DataFrame
中的每个元素。
什么是λ?
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/索引/选择数据