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

使用Lambda处理Pandas列正则提取时出现'NoneType'无'group'属性错误

解决Pandas正则提取时的AttributeError问题

嘿,这个问题我太熟了!当re.search()在你的content列某行里找不到符合@([a-zA-Z0-9]{1,15})的匹配内容时,它会返回None,这时候你直接调用.group(1)就会触发'NoneType' object has no attribute 'group'这个错误。咱们有几个简单的解决办法:

方法1:在lambda里处理None的情况

你可以先判断re.search()的返回值是不是None,再决定要不要提取分组内容:

  • 如果你的Python版本是3.8+,可以用海象运算符简化代码:
import re
dff['User_Mentions'] = dff['content'].apply(lambda x: match.group(1) if (match := re.search("@([a-zA-Z0-9]{1,15})", x)) else None)
  • 要是版本较低,就用嵌套的方式避免重复调用正则:
dff['User_Mentions'] = dff['content'].apply(lambda x: (lambda m: m.group(1) if m else None)(re.search("@([a-zA-Z0-9]{1,15})", x)))

这样没有匹配的行就会被设为None,不会报错。

方法2:用Pandas原生的str.extract()(更推荐)

Pandas专门提供了字符串处理方法,str.extract()会自动处理没有匹配的情况,直接返回NaN,代码更简洁高效:

dff['User_Mentions'] = dff['content'].str.extract("@([a-zA-Z0-9]{1,15})", expand=False)

expand=False会让结果返回Series,刚好适合赋值给新列。

额外排查:看看哪些行没匹配到

如果你想知道为什么有些行没匹配上,可以先找出这些行,检查是不是正则表达式的问题(比如用户名里有下划线?Twitter用户名允许下划线,但你的正则只包含字母数字):

no_match_rows = dff[dff['content'].str.contains("@([a-zA-Z0-9]{1,15})") == False]
print(no_match_rows['content'])

要是确实有带下划线的用户名,把正则改成@([a-zA-Z0-9_]{1,15})就好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:33:36