将字符串转换为日期时间极坐标

问题描述 投票:0回答:1

我有一个 Polars 数据框,其中有一列类型为

str
,日期和时间的格式为
2020-03-02T13:10:42.550
。我想将此列转换为 Polars.datetime 类型。

读完这篇文章后轻松将字符串列转换为Polars中的pl.datetime,我想出了:

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

但是,我的“EventTime”列的值都是空。

非常感谢!

python python-polars
1个回答
8
投票

你很接近。 您忘记了格式说明符的秒部分:

(
    df
    .with_columns(
        pl.col('EventTime')
        .str.to_datetime(
            format="%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.550 ┆ 2020-03-02 13:10:42.550 │
└─────────────────────────┴─────────────────────────┘

顺便说一句,您使用的格式是标准的,因此您可以完全消除格式说明符。

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

编辑

如果我想忽略毫秒怎么办?所以“%.f”,如果我把它省略,它就无法正确解释数据帧

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

也就是说,解析之后,我们可以使用

dt.truncate
扔掉小数部分。

(
    df
    .with_columns(
        pl.col('EventTime')
        .str.to_datetime()
        .dt.truncate('1s')
        .alias('parsed EventTime')
    )
)
shape: (1, 2)
┌─────────────────────────┬─────────────────────┐
│ EventTime               ┆ parsed EventTime    │
│ ---                     ┆ ---                 │
│ str                     ┆ datetime[μs]        │
╞═════════════════════════╪═════════════════════╡
│ 2020-03-02T13:10:42.550 ┆ 2020-03-02 13:10:42 │
└─────────────────────────┴─────────────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.