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
相关产品推荐
相关产品推荐

