如何无需正则从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
相关产品推荐
相关产品推荐

