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

如何无需正则从DataFrame提取邮箱服务商与国家ISD码?

不用正则的简便实现方法

当然有!Pandas自带的字符串处理方法足够直观简便,完全能满足你的需求,不用写复杂的正则表达式。咱们结合你的示例数据一步步来:

首先先定义你的示例DataFrame:

import pandas as pd

data = pd.DataFrame({
    "Name":["A","B","C"],
    "mail": ["a@gmail.com","b@yahoo.com","c@gmail.com"],
    "Adress": ["Adress1","Adress2","Adress3"],
    "Phone":["+91-1234567890","+88- 0987654321","+27-2647589201"]
})

1. 提取邮箱服务商(生成Mail_Provider列)

邮箱格式是xxx@服务商.com,我们可以通过两次拆分来提取服务商:

  • 先用str.split('@')把邮箱按@拆分成两部分,取第二部分(也就是服务商.com)
  • 再用str.split('.')把这部分按.拆分,取第一部分就是服务商名称

代码实现:

# 提取邮箱服务商
data['Mail_Provider'] = data['mail'].str.split('@').str[1].str.split('.').str[0]

2. 提取国家ISD码(生成ISD列)

手机号格式是+XX-电话号码,我们只需要拆分出-前面的部分即可。这里用str.partition('-')更稳妥(只会拆分一次,避免号码里意外出现-的情况),取拆分后的第一部分:

代码实现:

# 提取ISD码
data['ISD'] = data['Phone'].str.partition('-')[0]

最终结果

运行完上面的代码后,你的DataFrame就会新增两列,打印data就能看到预期结果:

Name          mail    Adress            Phone Mail_Provider  ISD
0    A  a@gmail.com  Adress1  +91-1234567890          gmail  +91
1    B  b@yahoo.com  Adress2  +88- 0987654321          yahoo  +88
2    C  c@gmail.com  Adress3  +27-2647589201          gmail  +27

这些方法都是Pandas原生的字符串操作,比正则更直观,也更容易理解和维护,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:24:19