如何从Phone字段提取分机号至Ext字段并清理Phone字段?
解决Phone与Ext字段的拆分与清理问题
1. 安全拆分Phone字段
使用str.split的expand=True参数拆分,避免无分机行报错:
# 按' x'分割Phone,最多拆1次,生成两列 phone_parts = df['Phone'].str.split(' x', n=1, expand=True) # 更新Phone为纯号码部分 df['Phone'] = phone_parts[0] # 临时存储从Phone提取的分机(含下划线) ext_from_phone = phone_parts[1]
2. 清理并合并分机到Ext字段
先处理提取的分机(去掉下划线),再统一原有Ext的格式(去掉开头的'x'),最后优先用Phone里的分机:
# 清理Phone里提取的分机:移除所有下划线 ext_from_phone_clean = ext_from_phone.str.replace('_', '', regex=False) # 清理原有Ext:去掉开头的'x' df['Ext'] = df['Ext'].str.replace('^x', '', regex=True) # 合并:优先用Phone提取的分机,无则保留原有清理后的Ext df['Ext'] = ext_from_phone_clean.combine_first(df['Ext'])
3. 可选:统一空值格式
如果需要把空字段转为空字符串而非NaN,执行:
df[['Phone', 'Ext']] = df[['Phone', 'Ext']].fillna('')
完整代码
# 拆分Phone字段 phone_parts = df['Phone'].str.split(' x', n=1, expand=True) df['Phone'] = phone_parts[0] ext_from_phone = phone_parts[1] # 清理合并分机号 ext_from_phone_clean = ext_from_phone.str.replace('_', '', regex=False) df['Ext'] = df['Ext'].str.replace('^x', '', regex=True) df['Ext'] = ext_from_phone_clean.combine_first(df['Ext']) # 可选:空值转空字符串 df[['Phone', 'Ext']] = df[['Phone', 'Ext']].fillna('')
处理后效果:
- Phone字段仅保留纯号码,如
(800) 555-9876 - Ext字段优先使用从Phone提取的清理后分机,无则保留原有Ext的规范化值,空字段为
NaN或空字符串
内容的提问来源于stack exchange,提问作者Bijan
相关产品推荐
相关产品推荐

