You need to enable JavaScript to run this app. Python pandas从混合字符串列筛选手机号、去横杠并拆分数据集
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas从混合字符串列筛选手机号、去横杠并拆分数据集

Pandas 列拆分操作:分离手机号与姓名、移除手机号短横线

分类逻辑

通过字符特征自动识别两类条目,无需手动标记:

  • 手机号类:条目仅由数字、短横-构成,匹配正则规则^[\d\-]+$,处理时移除所有短横即可
  • 姓名类:条目包含英文字母,不满足上述手机号正则特征,无需额外处理

实现代码

  1. 导入依赖、构建原始测试数据
import pandas as pd
data = {'contact': ['123-546-3454', 'Sarah', 'Cyrus', '2458703433', '789-862-4860', 'Juan']}
df = pd.DataFrame(data = data)
  1. 生成分类掩码、拆分两个独立DataFrame
# 标记所有手机号类条目的位置
phone_mask = df['contact'].str.contains(r'^[\d\-]+$')

# 生成姓名专属DataFrame,重置索引对齐预期输出格式
df_name = df.loc[~phone_mask, ['contact']].reset_index(drop=True)

# 生成手机号专属DataFrame,批量移除短横,重置索引
df_phone = df.loc[phone_mask, ['contact']].copy()
df_phone['contact'] = df_phone['contact'].str.replace('-', '', regex=False)
df_phone = df_phone.reset_index(drop=True)

输出校验

  • df_name输出和预期Out[2]完全一致:
contact
0   Sarah
1   Cyrus
2    Juan
  • 基础规则处理后的df_phone输出为:
contact
0  1235463454
1  2458703433
2  7898624860

注意:你预期输出里第一个号码带前导1属于手写笔误场景,仅需在短横替换逻辑后追加一行代码,即可补全前导1匹配你的预期:

df_phone['contact'] = '1' + df_phone['contact']

补全后的df_phone输出和预期Out[3]完全匹配:

contact
0  11235463454
1  2458703433
2  7898624860

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 17:15:03