将字符串转换为DateTime Polars

4

我有一个Polars数据框,其中包含一个类型为str的列,格式为2020-03-02T13:10:42.550的日期和时间。我想将此列转换为polars.datetime类型。

在阅读了这篇文章Easily convert string column to pl.datetime in Polars后,我得出了以下结论:

df = df.with_column(pl.col('EventTime').str.strptime(pl.Datetime, fmt="%Y-%m-%dT%H:%M:%f", strict=False))

然而,我的“EventTime”列的所有值都是空的。

非常感谢!


除了缺失的秒指令 %s 之外,**它对于小数秒是 %.f**,而不是在原生的 Python 中使用的 .%f - FObersteiner
1个回答

6
您差不多了,只是忘记了您的格式说明符中的秒组件:
(
    df
    .with_column(
        pl.col('EventTime')
        .str.strptime(pl.Datetime,
                      fmt="%Y-%m-%dT%H:%M:%S%.f",
                      strict=False)
        .alias('parsed EventTime')
    )
)

shape: (1, 2)
┌─────────────────────────┬─────────────────────────┐
│ EventTime               ┆ parsed EventTime        │
│ ---                     ┆ ---                     │
│ str                     ┆ datetime[ns]            │
╞═════════════════════════╪═════════════════════════╡
│ 2020-03-02T13:10:42.5502020-03-02 13:10:42.550 │
└─────────────────────────┴─────────────────────────┘

顺便说一下,你使用的格式是标准的,所以你可以完全省略格式说明符。

(
    df
    .with_column(
        pl.col('EventTime')
        .str.strptime(pl.Datetime,
                      strict=False)
        .alias('parsed EventTime')
    )
)

shape: (1, 2)
┌─────────────────────────┬─────────────────────────┐
│ EventTime               ┆ parsed EventTime        │
│ ---                     ┆ ---                     │
│ str                     ┆ datetime[μs]            │
╞═════════════════════════╪═════════════════════════╡
│ 2020-03-02T13:10:42.5502020-03-02 13:10:42.550 │
└─────────────────────────┴─────────────────────────┘

编辑

如果我想忽略毫秒怎么办?因此,如果我只是省略"%.f",它无法正确解释数据框。

我们需要允许 Polars 根据字符串的实际格式解析日期字符串。

也就是说,在解析后,我们可以使用dt.truncate来去除小数部分。

(
    df
    .with_column(
        pl.col('EventTime')
        .str.strptime(pl.Datetime,
                      strict=False)
        .dt.truncate('1s')
        .alias('parsed EventTime')
    )
)

shape: (1, 2)
┌─────────────────────────┬─────────────────────┐
│ EventTime               ┆ parsed EventTime    │
│ ---                     ┆ ---                 │
│ str                     ┆ datetime[μs]        │
╞═════════════════════════╪═════════════════════╡
│ 2020-03-02T13:10:42.5502020-03-02 13:10:42 │
└─────────────────────────┴─────────────────────┘

哦,哇...我不知道那是标准,谢谢!! - Johnas
1
这是 Polars 将自动尝试的几个标准之一。fmt 格式说明符用于非标准格式(或您想强制执行特定格式)的情况。 - user18559875
如果我想忽略毫秒怎么办?所以如果我只是省略"%.f",它无法正确解释数据框。 - Johnas
1
我已经添加了一个关于如何丢弃小数秒的部分。 - user18559875

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接