pandas读取Excel缺失值不显示及手机号正则格式化问题
问题1:pandas读取Excel缺失值不显示解决方案
原因分析
你之前测试时用到的na_filter=False、keep_default_na=False参数会关闭pandas默认的空值识别逻辑,另外Excel中空值可能以空白字符串、不可见空格等形式存在,不会被默认识别为NaN。
解决步骤
- 调整读取参数,开启空值识别:
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=['', ' ', '未填写'] # 自定义需要识别为空值的特殊内容 )
- 统一替换空白内容为标准缺失值:
如果Excel中存在全空白的单元格未被识别为缺失值,执行以下代码统一转换:
df = df.replace(r'^\s*$', pd.NA, regex=True)
- 验证缺失值统计:
执行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
相关产品推荐
相关产品推荐

