如何在Polars中高效删除指定列之后的所有列?
在Polars中保留起始列到指定列(含)的高效实现方式
Polars提供了两种高效的实现方式,完全匹配你的需求,且充分利用其列存引擎的性能优势:
方式一:基于列索引切片
和你在Pandas中的思路逻辑一致,先定位目标列的索引,再切片选择范围:
import polars as pl # 读取CSV文件(大文件推荐用scan_csv做惰性读取) df = pl.read_csv("your_data.csv") # 获取目标列'XYZ'的索引位置 col_position = df.columns.index('XYZ') # 选择从第0列到目标列的所有列(包含目标列) filtered_df = df[:, :col_position + 1]
针对超大文件的惰性读取优化版本:
lf = pl.scan_csv("your_large_data.csv") col_position = lf.columns.index('XYZ') filtered_lf = lf[:, :col_position + 1] # 按需触发计算并转为DataFrame filtered_df = filtered_lf.collect()
方式二:基于列名列表选择
先提取目标范围内的列名列表,直接选择这些列,代码可读性更强:
import polars as pl df = pl.read_csv("your_data.csv") # 生成从起始列到'XYZ'的列名列表 target_columns = df.columns[:df.columns.index('XYZ') + 1] # 选择目标列 filtered_df = df.select(target_columns)
惰性读取版本:
lf = pl.scan_csv("your_large_data.csv") target_columns = lf.columns[:lf.columns.index('XYZ') + 1] filtered_lf = lf.select(target_columns) filtered_df = filtered_lf.collect()
补充说明
- 两种方法都是零拷贝操作,不会额外占用内存,性能拉满;
- 处理超大型文件时,务必使用
scan_csv的惰性模式,它只会加载和处理你需要的列,避免内存溢出。
内容的提问来源于stack exchange,提问作者Talha Tayyab
相关产品推荐
相关产品推荐

