Python Polars:如何在Lazy模式下获取LazyFrame的行数?
使用Polars Lazy模式统计大CSV行数的最优方案
针对70GB的超大CSV文件,用Polars的Lazy模式统计行数的最优方式是利用Polars的查询优化能力,只执行行数统计的必要操作,完全无需加载全量数据到内存:
方法一:直接统计数据行数
用scan_csv懒加载文件后,通过count()函数直接统计行数,Polars会自动优化查询逻辑,仅扫描文件计数,不会解析所有列的实际数据:
import polars as pl # 懒加载目标CSV文件 lazy_df = pl.scan_csv("your_large_file.csv") # 执行行数统计查询并获取结果 row_count = lazy_df.select(pl.count()).collect().item() print(f"数据总行数:{row_count}")
Polars默认会识别文件表头并跳过,所以count()返回的是表头之外的纯数据行数量。
方法二:手动跳过表头(特殊场景)
如果你的CSV表头格式特殊,需要手动指定跳过行数,可以结合skip_rows参数再统计:
lazy_df = pl.scan_csv("your_large_file.csv", skip_rows=1) row_count = lazy_df.select(pl.count()).collect().item()
方案优势
- 全程基于Lazy模式,Polars查询优化器会将任务简化为仅扫描文件计数,内存占用极低,完全适配数十GB级别的大文件。
- 底层由Rust实现,IO效率和计数速度远高于纯Python方案。
内容的提问来源于stack exchange,提问作者roei shlezinger
相关产品推荐
相关产品推荐

