我的用例:我有一个带有野生时间戳(字符串)的列,我希望将它们解析为时间戳类型.

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()个动作是否到位,我很难从文档中确定我应该迭代什么.是Series,ChunkedArray和Do I从新的ChunkedArray或从迭代器I Can collect()或其他任何东西构造新的Series.

Edit

我也找到了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,而Lazy 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相关问答推荐

在Rust中创建可变片段的可变片段的最有效方法是什么?

什么是Rust惯用的方式来使特征向量具有单个向量项的别名?

在没有引用计数或互斥锁的情况下,可以从Rust回调函数内的封闭作用域访问变量吗?

什么时候铁 rust FFI边界上的panic 是未定义的行为?

捕获FnMut闭包的时间不够长

替换可变引用中的字符串会泄漏内存吗?

为什么铁 rust S的默认排序功能比我对小数组的 Select 排序稍微慢一些?

在Rust 中移动原始指针的靶子安全吗

如何设置activx websocket actorless的消息大小限制?

如何使用tracing-subscriberRust crate 构建多编写者、全局过滤订阅者

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

pyO3 和 Panics

为什么 `tokio::join!` 宏不需要 Rust 中的 `await` 关键字?

从 Rust 中的 if/else 中的引用创建 MappedRwLockWriteGuard

使用 traits 时,borrow 的值不会存在足够长的时间

在构建器模式中捕获 &str 时如何使用生命周期?

为什么 File::read_to_end 缓冲区容量越大越慢?

在 RefCell 上borrow

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

制作嵌套迭代器的迭代器