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

Python DataFrame字符串分割报错:'list'对象无'str'属性

解决Pandas中提取字符串时的AttributeError问题

嘿,这个错误我太熟悉了!咱们先搞清楚问题出在哪:

你写的lambda x: x.split('_').str[1]里,x.split('_')会把单个字符串分割成Python原生列表(比如你的示例会变成['AAA', 'BBB', 'New Zeon', 'Dec 25 2017']),而.str属性是Pandas Series独有的方法,原生列表根本没有这个属性,所以就抛出了AttributeError: 'list' object has no attribute 'str'。

方法一:直接用列表索引(适合简单场景)

既然split返回的是列表,直接用索引取值就行。注意你要的是第二个下划线后的内容,对应列表的第3个元素(索引从0开始),所以代码改成这样:

df['Region'] = df.Campaign.apply(lambda x: x.split('_')[2])

如果担心有些Campaign字符串的下划线数量不足3个(会导致索引越界),可以加个判断兜底:

df['Region'] = df.Campaign.apply(lambda x: x.split('_')[2] if len(x.split('_')) >= 3 else '')

方法二:用Pandas矢量化操作(更高效)

其实不用apply也能搞定,Pandas的str.split本身就支持矢量化处理,速度比逐行apply快很多(尤其是数据量大的时候):

# expand=True会把分割后的结果展开成多列DataFrame,然后取第3列(索引2)
df['Region'] = df['Campaign'].str.split('_', expand=True)[2]

同样,要处理下划线不足的情况,可以用fillna填充空值:

df['Region'] = df['Campaign'].str.split('_', expand=True)[2].fillna('')

这样就能顺利把Campaign里第二个下划线后的内容提取到Region列啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:23