我对Polars的Python包很有经验,刚刚开始使用铁 rust crate .

在一个函数中,我想返回一个几乎肯定包含缺少值的列的DataFrame.我目前的方法是创建带有前哨值的向量,作为DataFrame的起点,然后我希望用null替换这些值. 但我并没有取得太大成功.

我可以使用如下所示创建向量和DataFrame

let mut a_vec: Vec<i64> = Vec::with_capacity(10);

for i in 0..10 {
    if <condition> {
        a_vec[i] = 1;
    } else {
        a_vec[i] = std::i64::MAX
    }
}

let mut df: DataFrame = df!("a" => a_vec).unwrap();

现在我想用null来代替std::i64::MAX.

在Python Polars中,我可以使用replace method来 run ,但在Rust中,我还没有找到(好的)方法来实现这一点.

如果有更好的方法来做到这一点,我会洗耳恭听.

推荐答案

正确的方法是创建一个Option的矢量:

let mut a_vec: Vec<Option<i64>> = Vec::with_capacity(10);

for i in 0..10 {
    if i != 5 {
        a_vec.push(Some(1));
    } else {
        a_vec.push(None);
    }
}

let mut df: DataFrame = df!("a" => a_vec).unwrap();

你也可以使用chunked array builders,它应该更有效:

let mut a_vec: PrimitiveChunkedBuilder<Int64Type> = PrimitiveChunkedBuilder::new("a", 10);

for i in 0..10 {
    if i != 5 {
        a_vec.append_value(1);
    } else {
        a_vec.append_null();
    }
}

let a_vec = a_vec.finish();

let mut df: DataFrame = df!("a" => a_vec).unwrap();

Rust相关问答推荐

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

将JSON密钥转换为Polars DataFrame

当Option为None时,Option数组是否占用Rust中的内存?

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

同时从不同线程调用DLL的不同函数会出现分段错误或产生STATUS_STACK_BUFFER_OVERRUN

S在Cargo.toml中添加工作空间开发依赖关系的正确方法是什么?

失真图像图形捕获Api

try 实现线程安全的缓存

使用占位符获取用户输入

如何在 Rust 中打印 let-else 语句中的错误?

为什么我们有两种方法来包含 serde_derive?

go 重并堆积MPSC通道消息

Rust 异步循环函数阻塞了其他future 任务的执行

在不安全的 Rust 中存储对 struct 内部数据的静态引用是否合法?

不安全块不返回预期值

你能告诉我如何在 Rust 中使用定时器吗?

如何将切片推入数组?

使用泛型作为关联类型,没有幻像数据

基于名称是否存在的条件编译