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
也可以与日期时间列一起使用。
如何将 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
也可以与日期时间列一起使用。