You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中使用含条件与逻辑运算符的Lambda函数报错排查

解决Pandas中Lambda函数结合str.contains报错的问题

错误原因

你用sample["A"].apply(lambda x: ...)时,x是列中单个的字符串对象,而非Pandas Series。.str属性是Series专属的方法入口,单个字符串没有这个属性,所以触发AttributeError: 'str' object has no attribute 'str'。

正确解法

解法1:使用Pandas矢量化操作(推荐,效率更高)

直接利用Series的str.contains方法,通过正则表达式|连接多个关键词,一次性完成匹配,再用map转换结果:

import pandas as pd

d = {"A":["Assessment Division","Division of Appeals","Calgary Audit","Halifax Market","Georgian Markers"],
"B":[100,300,400,500,400]}

sample = pd.DataFrame(d)

# 正则匹配任意关键词,case=False表示不区分大小写(可选)
sample["results"] = sample["A"].str.contains("Audit|Appeals|Assessment", case=False).map({True: "Invoice", False: "NoAction"})

解法2:保留Lambda+Apply的方式

如果坚持用apply,直接对单个字符串做成员判断,用any()简化多关键词检查:

import pandas as pd

d = {"A":["Assessment Division","Division of Appeals","Calgary Audit","Halifax Market","Georgian Markers"],
"B":[100,300,400,500,400]}

sample = pd.DataFrame(d)

reqs = ["Audit","Appeals","Assessment"]
sample["results"] = sample["A"].apply(lambda x: "Invoice" if any(req in x for req in reqs) else "NoAction")

原代码问题说明

  • 第一段代码:错误地对单个字符串x调用.str.contains,应改为"Audit" in x这类直接判断。
  • 第二段代码:既错误使用了x.str,又误用了contains()和isin()的语法,逻辑完全不成立。

内容的提问来源于stack exchange,提问作者conrito345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:00:19