
本文介绍在 polars 中批量去除 dataframe 列名中首尾及中间所有空白字符(包括空格、制表符等)的简洁、高效方法,避免使用冗余函数或不安全的字符串操作。
本文介绍在 polars 中批量去除 dataframe 列名中首尾及中间所有空白字符(包括空格、制表符等)的简洁、高效方法,避免使用冗余函数或不安全的字符串操作。
在处理来自 CSV 或 TSV 等外部数据源时,列名常因格式混乱而包含多余空格、制表符(\t)甚至不可见 Unicode 空白字符,这不仅影响后续代码可读性,还可能导致 .select()、.with_columns() 等操作因列名不匹配而失败。
Polars 原生支持向量化字符串操作,推荐采用以下「极简且地道」的方式统一清洗列名:
import polars as pl
df = pl.read_csv("data.csv", comment_prefix="#", separator="\t")
# 将所有列名中的空白字符(含首尾空格、中间空格、制表符等)全部移除
df.columns = pl.Series(df.columns).str.replace_all(r"\s+", "").to_list()✅ 为什么这是更“polaric”的做法?
- pl.Series(df.columns) 将列名列表转为 Polars Series,启用原生字符串方法;
- .str.replace_all(r"\s+", "") 使用正则精准匹配所有空白字符(\s 包含空格、\t、\n、\r、全角空格等),并一次性替换为空字符串;
- .to_list() 转回 Python 列表以赋值给 df.columns —— 这是 Polars 允许的合法列名更新方式。
⚠️ 注意事项:
- ❌ 避免仅用 .strip()(如 lambda x: x.strip()),它只能清除首尾空白,无法处理列名中间的空格(如 "A B" → "A B" 不变);
- ❌ 不建议手动遍历 df.columns 构造新列表,既低效又违背 Polars 向量化设计哲学;
- ✅ 若需保留部分语义分隔(如将 "First Name" → "first_name"),可升级为 .str.replace_all(r"\s+", "_").str.to_lowercase() 实现标准化命名。
最终效果示例:
原始列名 ["A ", "\tB ", "C\t\t", "D \n", "E"]
→ 清洗后变为 ["A", "B", "C", "D", "E"],干净、一致、可直接用于链式操作。

















