如何在Python-Polars中选择特定日期范围之间的行?

问题描述 投票:0回答:2

如果使用 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]
})

如何选择特定日期范围之间的行,即

"2016-08-10"
"2016-08-31"
之间的行,以便期望的结果是:

┌────────────┬────────┐
│ dates      ┆ values │
│ ---        ┆ ---    │
│ date       ┆ i64    │
╞════════════╪════════╡
│ 2016-08-10 ┆ 2      │
│ 2016-08-31 ┆ 3      │
└────────────┴────────┘
python dataframe python-polars
2个回答
9
投票

首先您需要将字符串值转换为日期类型,然后进行过滤:

# eager
(df.with_columns(pl.col("dates").str.to_date()) 
 .filter(col("dates").is_between(datetime(2016, 8, 9), datetime(2016, 9, 1)))
)

# lazy
(df.lazy()
 .with_columns(pl.col("dates").str.to_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      │
└────────────┴────────┘

0
投票

在日期列上使用 is_ Between 表达式:

    df.filter(
            pl.col("dates").is_between(pl.date(2016, 8, 10), pl.date(2016, 8, 31)),
    )
© www.soinside.com 2019 - 2024. All rights reserved.