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

Rust中Polars的pl.struct()等效实现方法咨询

在Rust Polars中合并多列为Struct类型的实现

Rust Polars 中对应 Python Polars pl.struct() 的方法是 struct_,下面分两种常见场景给出实现示例:

1. 直接将现有多列合并为Struct列

如果只是把已存在的列直接打包成Struct,直接用 struct_ 传入列名列表即可:

use polars::prelude::*;

fn main() -> Result<(), PolarsError> {
    // 创建示例DataFrame
    let df = df!(
        "a" => [1, 2, 3],
        "b" => ["x", "y", "z"],
        "c" => [true, false, true]
    )?;

    // 合并a、b列为名为"my_struct"的Struct列
    let df_with_struct = df
        .lazy()
        .select([
            col("c"),
            struct_(["a", "b"]).alias("my_struct")
        ])
        .collect()?;

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

这段代码的效果和 Python 中 df.select([pl.col("c"), pl.struct(["a", "b"]).alias("my_struct")]) 完全一致。

2. 基于表达式转换后构造Struct列

如果需要对列做计算或转换后再打包成Struct,可以在 struct_ 中传入表达式列表:

use polars::prelude::*;

fn main() -> Result<(), PolarsError> {
    let df = df!(
        "a" => [1, 2, 3],
        "b" => [4, 5, 6]
    )?;

    // 对a、b列做加法后,和原a列一起打包成Struct
    let df_with_struct = df
        .lazy()
        .select([
            struct_([
                col("a"),
                (col("a") + col("b")).alias("a_plus_b")
            ]).alias("calculated_struct")
        ])
        .collect()?;

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

注意事项

  • 要确保导入 polars::prelude::*,否则相关方法和宏会无法识别;
  • Rust Polars 的惰性API(lazy())和 eager API 都支持 struct_ 方法,上面示例用的是惰性API,如果你习惯 eager 写法,直接在DataFrame上调用 select 即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:52:05