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

Pandas正则提取手机号至新列失效问题求助

问题解决:Pandas正则提取数字后赋值无结果的问题

问题场景

编写Pandas脚本时需要实现以下逻辑:

  • 检查Name列单元格内容,匹配不同字符串时对Value列做对应处理,结果写入New_Value列:
    • 匹配Number:提取Value中10-13位数字,追加[PHONE]
    • 匹配Animal/Company/Contact:直接将Value值追加对应标识[PET]/[COMPANY]/[NAME]

当前遇到的问题:正则提取手机号时New_Value列无结果写入,但移除正则部分仅追加[PHONE]时正常;单独用正则判断匹配能返回True。

错误原因

  1. str.extract默认返回DataFrame而非Series:未指定expand=False时,提取结果是单列DataFrame,直接与字符串[PHONE]拼接会导致类型不兼容,最终生成NaN值。
  2. 提取范围未限定目标行:原代码对整个Value列执行提取,再赋值给筛选后的行,会引入非目标行的NaN值干扰。

修正后的代码

import pandas as pd
import re

df = pd.read_csv("path_to_file")

# 处理Number匹配:限定目标行提取,指定expand=False返回Series
number_mask = df["Name"].str.contains("Number")
df.loc[number_mask, "New_Value"] = (
    df.loc[number_mask, "Value"].str.extract(r"(\d{10,13})", expand=False) + "[PHONE]"
)

# 处理其他匹配项
df.loc[df["Name"].str.contains("Animal"), "New_Value"] = df["Value"] + "[PET]"
df.loc[df["Name"].str.contains("Company"), "New_Value"] = df["Value"] + "[COMPANY]"
df.loc[df["Name"].str.contains("Contact"), "New_Value"] = df["Value"] + "[NAME]"

验证结果

针对示例数据:

NameValue
Number+639892943187
CompanyEbert_LLC
AnimalSnake
ContactMichal_Ashburner
Number668949201578

修正后可得到期望结果:

NameValueNew_Value
Number+639892943187639892943187[PHONE]
CompanyEbert_LLCEbert_LLC[COMPANY]
AnimalSnakeSnake[PET]
ContactMichal_AshburnerMichal_Ashburner[NAME]
Number668949201578668949201578[PHONE]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:23:17