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

Polars Rust中对应pl.lit()实现重复值列的方法

在Rust Polars中添加重复值列的正确方式

你遇到的问题是因为Literal::String("baz")属于LiteralValue类型,它并没有实现IntoSeries trait,而DataFrame::with_column方法要求传入的参数必须能转换为Series。

不需要手动构造对应长度的Vec或Series,Polars Rust提供了自动广播的能力,以下是几种正确实现方式:

方法1:使用lit!宏配合alias

lit!宏可以创建一个能自动广播的表达式,结合alias指定列名:

use polars::prelude::*;

fn main() -> Result<()> {
    let df = df!["foo" => [1, 2]]?
        .with_column(lit("baz").alias("bar"));
    println!("{:?}", df);
    Ok(())
}

方法2:用Series::new结合repeat

如果你想显式创建重复值的Series,也可以用Series::new配合repeat方法,Polars会自动匹配DataFrame的行数:

use polars::prelude::*;

fn main() -> Result<()> {
    let df = df!["foo" => [1, 2]]?
        .with_column(Series::new("bar", ["baz"].repeat(2)));
    println!("{:?}", df);
    Ok(())
}

方法3:使用with_columns(支持多列)

如果需要添加多列,with_columns同样支持表达式广播:

use polars::prelude::*;

fn main() -> Result<()> {
    let df = df!["foo" => [1, 2]]?
        .with_columns([lit("baz").alias("bar"), lit(3).alias("qux")]);
    println!("{:?}", df);
    Ok(())
}

核心逻辑:lit!宏生成的是Expr类型,with_column和with_columns方法可以接收表达式,Polars会自动将单个值广播为与DataFrame行数一致的列,不需要手动处理重复逻辑。你之前的写法错误在于直接传入了LiteralValue,而不是表达式或能转换为Series的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:03:16