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

pandas读取Excel缺失值不显示及手机号正则格式化问题

问题1:pandas读取Excel缺失值不显示解决方案

原因分析

你之前测试时用到的na_filter=False、keep_default_na=False参数会关闭pandas默认的空值识别逻辑,另外Excel中空值可能以空白字符串、不可见空格等形式存在,不会被默认识别为NaN。

解决步骤

  1. 调整读取参数,开启空值识别:
import pandas as pd
df = pd.read_excel(r'Recomeco/Decisões 06.09 a 12.09.xlsx', 
                   index_col=0, 
                   skiprows=2,
                   keep_default_na=True, # 开启默认空值识别逻辑
                   na_values=['', ' ', '未填写'] # 自定义需要识别为空值的特殊内容
                   )
  1. 统一替换空白内容为标准缺失值:
    如果Excel中存在全空白的单元格未被识别为缺失值,执行以下代码统一转换:
df = df.replace(r'^\s*$', pd.NA, regex=True)
  1. 验证缺失值统计:
    执行df.isnull().sum()即可查看每列的缺失值总数,避免Jupyter预览省略内容导致看不到缺失值。
问题2:手机号格式转换解决方案

你原有代码中re.findall返回的是列表类型,且没有捕获区号,推荐使用正则捕获组一次性完成格式转换,适配不同区号的手机号:

import re
def format_celular(celular):
    # 跳过空值避免报错
    if pd.isna(celular):
        return pd.NA
    # 同时捕获区号和号码段
    match_res = re.match(r'\((\d+)\)(\d+-\d+)', str(celular).strip())
    if match_res:
        return f"55 {match_res.group(1)} {match_res.group(2)}"
    # 匹配失败返回原值方便排查异常格式
    return celular

df['CELULAR1'] = df['CELULAR'].apply(format_celular)

如果需要基于你已提取到的号码后半段完成拼接,可执行以下代码:

# 提取区号
df['area_code'] = df['CELULAR'].str.extract(r'\((\d+)\)')
# 完成拼接,注意取出列表内的号码内容
df['CELULAR1'] = df.apply(lambda x: f"55 {x['area_code']} {x['CELULAR1'][0]}" if (pd.notna(x['CELULAR1']) and len(x['CELULAR1'])>0) else pd.NA, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

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