如何解决如果数据框的元素在列表中,则删除它们 为什么有效?什么是 lambda?
我请求您帮助解决我正在努力解决的 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?
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 / indexing/selecting data
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。