我的知识记录

Python Excel数据清洗 去除空格特殊字符

用pandas批量清洗Excel数据:去除首尾空格、全角转半角、去除换行和不可见字符、统一标点,让脏数据变得规范。

Python Excel数据清洗去除空格特殊字符

场景痛点

从不同系统导出来的数据,手机号里夹着空格、姓名前后有看不见的空格、备注里有换行符、全角半角混乱。这些脏数据导致去重去不掉、匹配匹配不上、导出报错。用Python一次清洗干净。

用到的库

pip install pandas openpyxl

完整代码

import re
import pandas as pd

def clean_text(text):
"""清洗单个文本值"""
if not isinstance(text, str):
return text
# 1. 去掉首尾空格
text = text.strip()
# 2. 把多个连续空格/制表符/换行换成单个空格
text = re.sub(r"\s+", " ", text)
# 3. 全角转半角
text = "".join(chr(ord(c) - 0xFEE0) if 0xFF01 <= ord(c) <= 0xFF5E else c for c in text)
# 4. 去掉不可见字符(换行、回车、制表符)
text = text.replace("\n", "").replace("\r", "").replace("\t", "")
return text

def clean_excel(input_file, output_file, text_cols=None):
df = pd.read_excel(input_file)

# 自动选所有文本列
if text_cols is None:
text_cols = df.select_dtypes(include="object").columns

for col in text_cols:
before = df[col].astype(str).tolist()
df[col] = df[col].apply(clean_text)
after = df[col].tolist()
changed = sum(1 for a, b in zip(before, after) if str(a) != str(b))
print(f"  列[{col}]清洗{changed}个单元格")

# 去除全空行
df = df.dropna(how="all")
df.to_excel(output_file, index=False)
print(f"清洗完成 -> {output_file}")

if __name__ == "__main__":
clean_excel("./客户表_脏数据.xlsx", "./客户表_清洗后.xlsx")

代码讲解

  • clean_text 函数:
  • strip() 去首尾空格;
  • re.sub(r"\s+", " ", text) 把连续多个空白压成一个;
  • 全角转半角的原理是全角字符Unicode码比半角大0xFEE0,批量减一下;
  • 手动去掉 \n \r \t 这些不可见字符。
  • select_dtypes(include="object") 自动识别文本列,不用手填列名。
  • dropna(how="all") 整行全空的行直接删掉。
  • 每列打印清洗了多少个单元格,心里有数。

运行结果

生成清洗后的Excel,所有文本列首尾空格去掉、不可见字符清除、全角转半角,控制台打印每列改动的单元格数量。

注意事项

  • 全角转半角会影响中文标点,比如","会变成",",业务上不希望变的话,把这步去掉。
  • 数字列不要清洗,先 select_dtypes 只处理object列。
  • 清洗前建议备份原文件,万一清洗规则改坏了能回滚。

Python Excel数据清洗 去除空格特殊字符

标签:

更新时间:2026-09-15 09:11:34

上一篇:Python Excel数据验证做下拉选择框方法详解

下一篇:Python Excel统计每行列数与非空单元格