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

如何清洗Pandas DataFrame中含Phone的列,保留纯数字格式?

修正方案及代码优化

先指出你原代码的几个问题:

  1. 循环里写df['col']是硬编码取名为col的列,不是遍历的目标列变量,得改成df[col]
  2. df.['col']多了个多余的点,属于语法错误,应该写成df[col]
  3. 没处理空值,要是单元格里有NaN,调用replace会直接报错
  4. 列名匹配PHONE时没开启大小写不敏感,得给str.contains加case=False参数

修正后的基础版代码

import pandas as pd

# 筛选所有含PHONE的列(大小写不敏感)
phone_cols = df.columns[df.columns.str.contains('PHONE', case=False)]

for col in phone_cols:
    # 处理空值,仅对非空内容做格式清理
    df[col] = df[col].apply(lambda x: ''.join([c for c in str(x) if c.isdigit()]) if pd.notna(x) else x)

更简洁的正则版(推荐)

用正则直接替换所有非数字字符,一步到位更高效:

import pandas as pd
import re

phone_cols = df.columns[df.columns.str.contains('PHONE', case=False)]

def clean_phone(x):
    if pd.notna(x):
        return re.sub(r'\D', '', str(x))
    return x

# 批量处理所有目标列
df[phone_cols] = df[phone_cols].applymap(clean_phone)

关键说明

  • re.sub(r'\D', '', str(x)):\D匹配所有非数字字符,直接替换为空字符串,一次性清理括号、空格、横杠等格式符号
  • pd.notna(x):先判断单元格是否为空,避免空值调用字符串方法时报错
  • applymap:对DataFrame的每个元素应用清理函数,比循环列再单独处理更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:20