rust - 从现有系列和 map 值创建新系列

标签 rust rust-polars

我的用例:我有一列包含野生时间戳(字符串),我想将它们解析为时间戳类型。

The docs提及 ChunkedArray 作为我的字符串的类型化容器。

但是,我无法完成图片。

fn with_timestamps(mut df: DataFrame) -> Result<DataFrame, PolarsError> {
    let column = df.column("myTime")?.clone(); // clone, just for a good measure ...

    let ca = column.utf8()?; // ChunkedArray

    // I think I want something like this:
    let new_time = Series::new("newTime", ca.into_iter().map(|v: &str| 42).collect());

    // 42 is not a timestamp,
    // but maybe I can work on that from an integer

    df.with_column(new_time);
    df
}

除此之外,我需要查明 .with_column() 是否起作用,我很难从文档中确定我应该迭代什么。是 SeriesChunkedArray 以及我是否从新的 ChunkedArray 或迭代器构造新的 Series我可以 collect() 或其他任何东西。

编辑

我找到了this answer同样,经过一番努力,我想出了这个在我的案例中有效的例子:

let df = df!("Fruit" => &["Apple", "Apple", "Pear"],
                            "Color" => &["Red", "Yellow", "Green"],
                            "Date" => &["02/21/2022 07:51:00 AM", "2/21/2022 07:51:00 AM", "2/21/2022 07:51:00 AM"])?;
let options = StrpTimeOptions {
    fmt: Some("%-m/%-d/%Y %I:%M:%S %p".into()),
    date_dtype: polars::datatypes::DataType::Datetime(TimeUnit::Milliseconds, None),
    exact: true,
    ..Default::default()
};

let foo = df
    .clone()
    .lazy()
    .with_columns([
       col("Date")
       .str()
       .strptime(options)
       .alias("parsed date")
     ])
    .collect();

请注意.lazy()。如果没有它,Expr (col("Foo").alias("bar") 似乎无法直接使用(不是Series,而惰性 API 只需要一个表达式),而我对 Rust 编译器消息的理解目前还不足以弄清楚原因以及惯用的方式是什么。

最佳答案

所以我认为这可能就是您想要的:

let parsed_time: Series = df
    .column("myTime")?
    .clone()
    .utf8()?
    .into_iter()
    .map(| v: Option<&str> | your_parse_fn(v) )
    .collect();

df.with_column(parsed_time)
df

如果我是对的--------- 这将覆盖您的数据!

发表评论并让我知道

关于rust - 从现有系列和 map 值创建新系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75746923/

相关文章:

rust - 如何为包含字符串的类型(或任何未实现复制的类型)实现复制和克隆?

python-polars - Polars 支持 UUID 吗?

pandas - 如何在 polars DataFrame 中的每一列与该列的平均值之间轻松执行计算

rust - 如何将输入发送到使用Command创建的进程的stdin并捕获输出(和状态)

rust - 进行unwrap_or_return的任何方式以尽早返回

rust - 合并盒装元素

rust - 如何使用 log4rs 的 RollingFileAppender 合并滚动日志记录?

dataframe - 如何在 Rust 中将函数应用于 polars DataFrame 的多列

rust - 如何使用 Polars Rust 中不同列的字符串长度创建列?

rust - Polars Dataframe-基于一列删除重复行