文本数据清洗需系统处理伪空值、编码异常、格式不一及非结构信息提取:先strip+replace统一空值,用utf-8-sig读取去BOM,正则清理控制字符,translate归一标点,小写/空格/数字标准化,正则或dateutil提取结构化字段。

文本数据清洗是Python数据分析中最常遇到的环节,核心在于把杂乱、不规范、含噪声的原始文本变成结构清晰、格式统一、可直接用于分析或建模的数据。
处理缺失与空值:别只用dropna
文本字段中常见空字符串、纯空白(空格/制表符/换行符)、None、NaN等“看似空实则难识别”的情况。直接df.dropna(subset=['text'])可能漏掉' \n'这类数据。
- 先用str.strip()清除首尾空白,再判断是否为空:
df['text'] = df['text'].str.strip().replace('', pd.NA) - 对object类型列,统一转为字符串再处理,避免AttributeError:
df['text'] = df['text'].astype(str).str.strip() - 用df['text'].apply(lambda x: len(str(x).strip()) == 0)精准定位伪空值
统一编码与特殊符号清理
爬虫或跨系统导出的文本常混入不可见字符(如\u200b零宽空格、\ufeffBOM头)、全角标点、乱码符号,影响分词和匹配。
- 读取CSV时指定encoding='utf-8-sig'自动去除BOM
- 用正则批量清理控制字符和多余符号:
re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]', '', text) - 半角/全角标点归一化:用str.translate()配合映射表,例如将全角逗号、句号转为英文标点
标准化大小写、空格与数字格式
用户输入随意性强,同一含义可能写作“iPhone13”、“iphone 13”、“IPHONE-13”,影响去重和分组。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- 基础统一:小写+单空格替换多空格+去前后空:
text.lower().replace('\xa0', ' ').split() and ' '.join(...) - 数字标准化:用re.sub(r'(\d+)\s*([kK]g|[mM]l|[cC]m)', r'\1\2', text)合并数量与单位
- 品牌/产品名缩写补全(如“vsco”→“VSCO”、“ios”→“iOS”)可借助自定义词典+str.replace()或正则替换
提取关键信息:从非结构文本到结构字段
地址、日期、手机号、价格等常藏在一段描述里,靠简单切分无法稳定获取。
- 用命名捕获组写清晰正则:
re.search(r'电话[::]?\s*(?P<phone>\d{11})', text)</phone>,返回字典便于构造新列 - 日期识别推荐dateutil.parser.parse()配合errors='coerce'容错解析,再转为标准datetime64
- 地址拆分可用jieba(中文)或usaddress(英文地址),比正则更鲁棒
文本清洗没有银弹,关键是根据业务场景设计检查清单,把规则写成可复用的函数,配合apply或assign链式调用,让每一步都可验证、可回溯。

















