
在 polars 中,直接传入列名列表(如 `df.select(['col1', 'col2'])`)是最简洁、最惯用的选择多列方式,无需导入 selectors 模块;selectors 适用于更复杂的模式化列筛选场景。
Polars 的 select() 方法设计简洁而强大,支持多种语法形式来选取列。当你已明确知道要选的列名时,最推荐、最 Pythonic 的方式就是直接传入字符串列表:
mylist = ['nrs', 'random'] result = df.select(mylist)
该写法语义清晰、性能高效,且与 Polars 的链式操作风格高度契合。运行结果将仅保留指定列,并保持原始顺序:
┌──────┬──────────┐ │ nrs ┆ random │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞══════╪══════════╡ │ 1 ┆ 0.662732 │ │ 2 ┆ 0.437345 │ │ 3 ┆ 0.43857 │ │ null ┆ 0.701177 │ │ 5 ┆ 0.390494 │ └──────┴──────────┘
除了列表形式,以下写法同样合法且等效(可根据上下文灵活选用):
- 多参数展开:df.select('nrs', 'random')
-
使用 pl.col() 表达式(单列或多列):
- df.select(pl.col('nrs'), pl.col('random'))
- df.select(pl.col(['nrs', 'random'])) —— 推荐用于需后续表达式组合的场景(如重命名、计算)
⚠️ 注意事项:
- 列名必须精确匹配(区分大小写),若列不存在会抛出 ColumnNotFoundError;
- select() 返回全新 DataFrame,原 df 不受影响(Polars 默认不可变);
- polars.selectors(如 cs.by_name())虽可用,但属于“重型工具”,适用于动态/条件化选择(例如 cs.starts_with('val') 或 cs.numeric()),对静态列名列表反而增加冗余依赖。
✅ 总结:对于固定列名列表的选择任务,坚持使用 df.select(['col_a', 'col_b']) —— 它是官方文档明确支持、社区广泛采用、且最易读易维护的惯用法。










