如何对Pandas列的唯一值调用apply方法筛选含指定关键词的内容
错误原因
- 第一处错误:
unique是pandas Series的方法,必须加括号执行才能拿到结果,你写的sal['JobTitle'].unique只是引用了方法本身,没有实际调用获取唯一值列表。 - 第二处错误:
unique()执行后返回的是NumPy数组类型,该类型没有apply方法,只有pandas的Series/DataFrame对象才有该方法。
可行解决方案
以下三种方案都可以实现筛选含'chief'的唯一职位名称的需求:
方案1:将唯一值转为Series后调用apply
先把unique()返回的数组转为pandas Series,再调用apply做判断,代码如下:
# 得到每个唯一职位对应的布尔判断结果 judge_result = pd.Series(sal['JobTitle'].unique()).apply(lambda x: chief_string(x)) # 直接筛选出符合条件的职位名称 chief_unique_jobs = pd.Series(sal['JobTitle'].unique())[judge_result]
方案2:使用列表推导式直接筛选
不需要借助pandas的apply方法,直接遍历唯一值数组做判断,写法更简洁高效:
chief_unique_jobs = [x for x in sal['JobTitle'].unique() if chief_string(x)]
方案3:先筛选原数据再去重(更推荐的pandas写法)
先从原数据中筛选出职位含'chief'的所有行,再对职位列取唯一值,逻辑更直观:
chief_unique_jobs = sal[sal['JobTitle'].apply(lambda x: chief_string(x))]['JobTitle'].unique()
内容的提问来源于stack exchange,提问作者Haripan
相关产品推荐
相关产品推荐

