You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中使用Polars读取CSV文件的指定列

如何在Rust中使用Polars读取CSV文件的指定列

嗨,这个问题我熟!在Rust里,想实现和Pandas read_csv指定列读取的功能,用Polars就可以搞定——它是Rust生态里最接近Pandas的数据分析库,对大文件的处理效率还特别友好。

首先你需要在项目的Cargo.toml里添加Polars的依赖,记得开启csv特性(用来处理CSV/TSV文件):

[dependencies]
polars = { version = "0.35", features = ["csv", "lazy"] }

这里加lazy特性是为了支持懒加载模式,处理超大文件时会更高效。

接下来给你两种实现方式,完全对应你Python里的需求:

1. 立即加载模式(Eager API)

这种方式和Pandas的read_csv行为最像,直接加载指定列到内存:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 完美对应你Python代码:pd.read_csv(file, sep='\t', header=None, usecols=[0,1,5])
    let df = CsvReader::from_path("你的文件路径.tsv")?
        .with_separator(b'\t') // 指定制表符分隔,对应sep='\t'
        .with_header(None)     // 表示文件没有表头,对应header=None
        .with_columns(Some(&[0, 1, 5])) // 只读取索引为0、1、5的列,对应usecols
        .finish()?;

    // 打印结果验证一下
    println!("{}", df);
    Ok(())
}

2. 懒加载模式(Lazy API)

如果你的文件特别大,强烈推荐这种模式——它不会一次性把所有数据加载到内存,而是先构建查询计划,最后再执行,内存占用会低很多:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let df = LazyCsvReader::new("你的文件路径.tsv")
        .with_separator(b'\t')
        .with_header(None)
        .finish()?
        // 因为没有表头,Polars会自动给列命名为column_0、column_1...,这里选择对应索引的列
        .select(&[col("column_0"), col("column_1"), col("column_5")])
        .collect()?;

    println!("{}", df);
    Ok(())
}

额外小提示

如果你的文件本身有表头,你也可以直接通过列名来选择,比如把with_columns(Some(&[0,1,5]))换成with_columns(Some(&["姓名", "年龄", "地址"])),或者在懒加载模式里用select(&[col("姓名"), col("年龄")]),用法和Pandas一样灵活。

备注:内容来源于stack exchange,提问作者zwh82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:08:05