我有一个 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”列的值都是空。
非常感谢!
你很接近。 您忘记了格式说明符的秒部分:
(
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 │
└─────────────────────────┴─────────────────────┘