
本文介绍如何高效、简洁地将 Polars DataFrame 的全部列名统一转为大写,重点推荐 df.rename(str.upper) 这一函数式方法,避免显式循环,兼顾可读性与性能。
本文介绍如何高效、简洁地将 polars dataframe 的全部列名统一转为大写,重点推荐 `df.rename(str.upper)` 这一函数式方法,避免显式循环,兼顾可读性与性能。
在数据清洗和标准化流程中,统一列名大小写是常见需求。当 Polars DataFrame 拥有数百列且命名风格混杂(如 "sales", "Region", "CUSTOMER_ID")时,手动逐个重命名显然不可行,而传统列表推导式(如 df.columns = [x.upper() for x in df.columns])虽可行,但属于“侵入式”操作——它绕过了 Polars 的链式调用设计哲学,且无法参与表达式优化。
更优雅、更符合 Polars 风格的解决方案是使用 .rename() 方法,并传入内置函数 str.upper:
import polars as pl
df = pl.DataFrame({
"foo": [1, 2, 3, 4, 5, 8],
"baz": [5, 4, 3, 2, 1, 9],
"MixedCaseCol": ["a", "b", "c", "d", "e", "f"]
})
df_upper = df.rename(str.upper)
print(df_upper.columns) # ['FOO', 'BAZ', 'MIXEDCASECOL']✅ 优势说明:
- 无循环、函数式:str.upper 作为可调用对象被 rename() 内部批量应用,语义清晰,代码极简;
- 返回新 DataFrame:默认行为是惰性复制(lazy evaluation 兼容),不修改原数据,利于链式操作(如 df.rename(str.upper).select(...).filter(...));
- 类型安全:Polars 会自动保留原始列的数据类型与元信息,仅变更名称;
- 扩展性强:同理可替换为 str.lower、str.title 或自定义函数(如 lambda x: x.replace(" ", "_").upper())。
⚠️ 注意事项:
- 若存在列名经 upper() 后重复(例如 "Foo" 和 "FOO"),Polars 将抛出 DuplicateError,需提前去重或添加唯一后缀;
- rename() 不支持就地修改(即无 inplace=True 参数),如需复用变量名,可显式赋值:df = df.rename(str.upper);
- 该方法仅作用于列名(df.columns),不影响行索引或单元格内容。
综上,df.rename(str.upper) 是 Polars 中标准化列名的首选方案:它简洁、安全、可组合,充分体现了函数式数据处理的设计理念。在构建可维护的数据流水线时,优先选用此类声明式操作,而非过程式循环。










