如何在 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 │
└────────────┴────────┘
如果使用 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 │
└────────────┴────────┘