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列。 - 清洗前建议备份原文件,万一清洗规则改坏了能回滚。

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