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

如何让pandas.Series.str.extract()在正则不匹配时保留原字符串值

如何让pandas.Series.str.extract()在正则不匹配时保留原字符串值

嘿,我完全懂你的困扰!你想从字符串里提取邮箱,遇到带尖括号的就把里面的内容取出来,但那些本来就格式正常(没有尖括号)的邮箱,可不想被转换成NaN,对吧?

其实有两个简单的办法可以解决这个问题:

方法一:结合extract和fillna补回原数据

你原来的extract操作只会保留匹配到的内容,不匹配的就变成NaN,那我们直接把这些NaN的位置填回原来的字符串就好啦:

# 用expand=False确保返回Series,然后fillna补回原数据
curr_emails = curr_emails.str.extract(r"<([^<>]+)>", expand=False).fillna(curr_emails)

这样一来,匹配到尖括号的行就会提取出里面的邮箱,没匹配到的行就保留原本的邮箱字符串,不会变成NaN了。

方法二:用str.replace直接移除尖括号(更简洁)

仔细想想,你的需求其实就是去掉邮箱两端可能存在的尖括号,不管有没有都处理一下,那用str.replace反而更直接:

# 匹配开头的<或者结尾的>,替换为空字符串
curr_emails = curr_emails.str.replace(r"^<|>$", "", regex=True)

这个正则表达式^<|>$的意思是:匹配字符串开头的<,或者字符串结尾的>,然后把它们替换成空。这样带尖括号的邮箱会被去掉括号,不带的就完全保持原样,刚好符合你的预期输出。

两种方法都能达到你想要的效果,第二种更简洁高效哦~

备注:内容来源于stack exchange,提问作者Caleb Renfroe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:38:08