Pandas正则提取手机号至新列失效问题求助
问题解决:Pandas正则提取数字后赋值无结果的问题
问题场景
编写Pandas脚本时需要实现以下逻辑:
- 检查
Name列单元格内容,匹配不同字符串时对Value列做对应处理,结果写入New_Value列:- 匹配
Number:提取Value中10-13位数字,追加[PHONE] - 匹配
Animal/Company/Contact:直接将Value值追加对应标识[PET]/[COMPANY]/[NAME]
- 匹配
当前遇到的问题:正则提取手机号时New_Value列无结果写入,但移除正则部分仅追加[PHONE]时正常;单独用正则判断匹配能返回True。
错误原因
str.extract默认返回DataFrame而非Series:未指定expand=False时,提取结果是单列DataFrame,直接与字符串[PHONE]拼接会导致类型不兼容,最终生成NaN值。- 提取范围未限定目标行:原代码对整个
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]"
验证结果
针对示例数据:
| Name | Value |
|---|---|
| Number | +639892943187 |
| Company | Ebert_LLC |
| Animal | Snake |
| Contact | Michal_Ashburner |
| Number | 668949201578 |
修正后可得到期望结果:
| Name | Value | New_Value |
|---|---|---|
| Number | +639892943187 | 639892943187[PHONE] |
| Company | Ebert_LLC | Ebert_LLC[COMPANY] |
| Animal | Snake | Snake[PET] |
| Contact | Michal_Ashburner | Michal_Ashburner[NAME] |
| Number | 668949201578 | 668949201578[PHONE] |
内容的提问来源于stack exchange,提问作者GrumpyGrizzle
相关产品推荐
相关产品推荐

