
在 Polars 中,若需保留从首列到目标列(如 'XYZ')的所有列,丢弃其后全部列,最简洁高效的方式是使用切片语法 df[:, :'XYZ'],它语义清晰、性能优异且无需手动查找索引。
在 polars 中,若需保留从首列到目标列(如 `'xyz'`)的所有列,丢弃其后全部列,最简洁高效的方式是使用切片语法 `df[:, :'xyz']`,它语义清晰、性能优异且无需手动查找索引。
Polars 提供了原生支持列名切片的语法,使得列范围截断操作比 Pandas 更加直观和高效。核心方法是利用 df[:, :'XYZ'] —— 这种写法类似于 Python 列表切片,但以列名为边界,表示“从第一列开始,到(并包含)列 'XYZ' 为止”。
以下是一个完整示例:
import polars as pl
df = pl.DataFrame({
'ABC': [1, 2, 3],
'DEF': [4, 5, 6],
'XYZ': [7, 8, 9],
'GHI': [10, 11, 12],
'JKL': [13, 14, 15]
})
# ✅ 推荐:一行完成,语义明确,零额外开销
result = df[:, :'XYZ']
print(result)
输出:
shape: (3, 3) ┌─────┬─────┬─────┐ │ ABC ┆ DEF ┆ XYZ │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ 1 ┆ 4 ┆ 7 │ │ 2 ┆ 5 ┆ 8 │ │ 3 ┆ 6 ┆ 9 │ └─────┴─────┴─────┘
该语法底层直接解析列名位置,避免了显式调用 columns.index() 或 find_idx_by_name(),不仅代码更短,而且规避了重复查找的潜在开销(尤其在宽表中优势明显)。需注意:
- 列名 'XYZ' 必须存在,否则抛出 ColumnNotFoundError;
- 若需容错处理(例如不确定列是否存在),可先用 'XYZ' in df.columns 判断,再执行切片;
- 此切片仅作用于列维度(第二维),行保持不变,符合 df[rows, cols] 的统一索引协议。
总之,df[:, :'target_col'] 是 Polars 中截断列尾的标准惯用法——兼具可读性、简洁性与高性能。










