Python Polars:将列读取为日期时间

Python Polars: Read Column as Datetime

如何将 csv 读入极坐标 DataFrame 并将其中一列解析为日期时间?

或者,如何将列转换为 pl.datetime

Polars 支持两种 csv reader,一种 built-in 和一种基于 pyarrow。 pyarrow reader 支持直接解析日期;另见 https://github.com/pola-rs/polars/issues/1330。您可以在 read_csv 中设置 use_pyarrow=True,但根据文档,它只会在其他参数输入 read_csv.

的情况下使用

或者,读取为 Utf8(字符串),并使用 strptime 解析为字符串:https://pola-rs.github.io/polars/py-polars/html/reference/api/polars.internals.series.StringNameSpace.strptime.html?highlight=strptime#polars.internals.series.StringNameSpace.strptime。这是我发现通常更简单的方法,但根据您的数据大小,可能会相对昂贵,因为您首先需要存储为 Utf8,然后再进行解析。

我会先在 read_csv 调用中尝试 parse_dates=True

例如,假设我们有以下数据:

import polars as pl
from io import StringIO
my_csv = StringIO(
"""
ID,start,last_updt,end
1,2008-10-31, 2020-11-28 12:48:53,12/31/2008
2,2007-10-31, 2021-11-29 01:37:20,12/31/2007
3,2006-10-31, 2021-11-30 23:22:05,12/31/2006
"""
)

pl.read_csv(my_csv, parse_dates=True)
shape: (3, 4)
┌─────┬────────────┬─────────────────────┬────────────┐
│ ID  ┆ start      ┆ last_updt           ┆ end        │
│ --- ┆ ---        ┆ ---                 ┆ ---        │
│ i64 ┆ date       ┆ datetime[μs]        ┆ str        │
╞═════╪════════════╪═════════════════════╪════════════╡
│ 1   ┆ 2008-10-31 ┆ 2020-11-28 12:48:53 ┆ 12/31/2008 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2   ┆ 2007-10-31 ┆ 2021-11-29 01:37:20 ┆ 12/31/2007 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 3   ┆ 2006-10-31 ┆ 2021-11-30 23:22:05 ┆ 12/31/2006 │
└─────┴────────────┴─────────────────────┴────────────┘

start 列解析为日期,last_updt 列解析为日期时间。但请注意,end 列未解析为日期,因为它不是 ISO 8601 格式。 (我遇到过很多 Date/Datetime 字段为 non-standard 的 csv 文件。)

要解析此列,我们可以使用 strptime 函数并提供适当的格式。

pl.read_csv(my_csv, parse_dates=True).with_column(pl.col('end').str.strptime(pl.Date, '%m/%d/%Y'))
shape: (3, 4)
┌─────┬────────────┬─────────────────────┬────────────┐
│ ID  ┆ start      ┆ last_updt           ┆ end        │
│ --- ┆ ---        ┆ ---                 ┆ ---        │
│ i64 ┆ date       ┆ datetime[μs]        ┆ date       │
╞═════╪════════════╪═════════════════════╪════════════╡
│ 1   ┆ 2008-10-31 ┆ 2020-11-28 12:48:53 ┆ 2008-12-31 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2   ┆ 2007-10-31 ┆ 2021-11-29 01:37:20 ┆ 2007-12-31 │
├╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 3   ┆ 2006-10-31 ┆ 2021-11-30 23:22:05 ┆ 2006-12-31 │
└─────┴────────────┴─────────────────────┴────────────┘

strptime 也可以与日期时间列一起使用。