如何在 python-polars 中的特定日期范围之间 select 行?

How to select rows between a certain date range in python-polars?

如果使用 polars-python 构造 DataFrame,如下所示:

import polars as pl
from polars import col
from datetime import datetime

df = pl.DataFrame({
    "dates": ["2016-07-02", "2016-08-10",  "2016-08-31", "2016-09-10"],
    "values": [1, 2, 3, 4]
})

如何 select 特定日期范围之间的行,即介于 "2016-08-10""2016-08-31" 之间,以便期望的结果是:

┌────────────┬────────┐
│ dates      ┆ values │
│ ---        ┆ ---    │
│ date       ┆ i64    │
╞════════════╪════════╡
│ 2016-08-10 ┆ 2      │
├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2016-08-31 ┆ 3      │
└────────────┴────────┘

首先你需要将 dates 中的字符串值转换为 datetimes 然后过滤:

# eager
(df.with_column(pl.col("dates").str.strptime(pl.Date)) 
 .filter(col("dates").is_between(datetime(2016, 8, 9), datetime(2016, 9, 1)))
)

# lazy
(df.lazy()
 .with_column(pl.col("dates").str.strptime(pl.Date)) 
 .filter(col("dates").is_between(datetime(2016, 8, 9), datetime(2016, 9, 1)))
 .collect()
)

两者都会产生所需的输出:

┌────────────┬────────┐
│ dates      ┆ values │
│ ---        ┆ ---    │
│ date       ┆ i64    │
╞════════════╪════════╡
│ 2016-08-10 ┆ 2      │
├╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2016-08-31 ┆ 3      │
└────────────┴────────┘