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

如何在Polars LazyFrame/DataFrame中访问行元素?

在Rust Polars中访问单行元素的方法

Polars是列式存储框架,和Pandas的行优先设计逻辑不同,但依然有多种方式实现类似.at/.loc/.iloc的单行元素访问需求:

1. 按行索引直接取单行(类似.iloc)

用DataFrame::row()方法通过行索引获取完整单行,返回的Row对象支持通过列名或列索引访问元素:

use polars::prelude::*;

fn main() -> Result<()> {
    let df = df!(
        "name" => ["Alice", "Bob", "Charlie"],
        "age" => [25, 30, 35]
    )?;

    // 获取索引为1的行(第二行)
    let target_row = df.row(1)?;

    // 通过列名取值
    let name: &str = target_row.get("name").unwrap();
    // 通过列索引取值
    let age: i32 = target_row.get(1).unwrap();

    println!("Name: {}, Age: {}", name, age);
    Ok(())
}

2. 直接获取单行指定列的值

如果只需要单行的某一列数据,可以结合column()和first()方法,比取整行更高效:

// 获取第一行的"age"列值
let first_age: Option<i32> = df.column("age")?.first().unwrap();

3. 按行列位置精准取值(类似.iloc[row, col])

直接通过列索引和行索引定位元素:

// 获取第2行(索引1)第1列(索引0)的内容
let target_val: &str = df.column(0)?.get(1).unwrap();

4. 过滤后访问单行

如果已经通过过滤得到单行DataFrame,直接用row(0)访问即可,无需转成Vec:

let filtered_df = df.filter(col("name").eq(lit("Bob")))?;
let filtered_row = filtered_df.row(0)?;
let bob_age: i32 = filtered_row.get("age").unwrap();

注意:Polars的设计优先优化列操作,行访问的性能不如列操作,如果需要频繁处理行数据,建议评估场景是否适合Polars,或者批量转成Vec<Row>处理。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:24:15