Polars DataFrame在一段时间(开始和结束时间)内过滤数据



是否有方法使用polars过滤一段时间内的数据(即start timeend time(?

import pandas as pd
import polars as pl
dr = pd.date_range(start='2020-01-01', end='2021-01-01', freq="30min") 
df = pd.DataFrame({"timestamp": dr})
pf = pl.from_pandas(df)

我做过的最好的尝试是:

pf.filter((pl.col("timestamp").dt.hour()>=9) & (pl.col("timestamp").dt.minute()>=30))

它只给了我9:30之后的一切;如果我在那之后附加另一个filter

pf.filter((pl.col("timestamp").dt.hour()>=9) & (pl.col("timestamp").dt.minute()>=30)).filter((pl.col("timestamp").dt.hour()<16))

然而,这并没有给我正好落在16:00上的切片。

polarsAPI似乎没有专门处理时间序列的time部分(仅处理date部分(;使用polars有更好的解决方法吗?

好问题!

首先,我们可以在Polars:中创建这种DataFrame

from datetime import datetime, time
import polars as pl
start = datetime(2020,1,1)
stop = datetime(2021,1,1)
df = pl.DataFrame({'timestamp':pl.date_range(start=start, end=stop, interval="30m",eager=True)}) 

为了处理日期时间的时间组件,我们将timestamp列强制转换为pl.Timedtype。

为了过滤一系列时间,我们将时间的上下限传递给in_between

在本例中,我打印了原始的timestamp列、转换为pl.Timetimestamp列以及筛选条件。

(
df
.select(
[
pl.col("timestamp"),
pl.col("timestamp").cast(pl.Time).alias('time_component'), 
(pl.col("timestamp").cast(pl.Time).is_between(
time(9,30),time(16)
).alias("timestamp_in_range")
)
]
)
)

你想要的是:

(
df
.filter(
pl.col("timestamp").cast(pl.Time).is_between(
time(9,30),time(16)
)
)
)

有关控制边界行为的语法,请参阅API文档:https://pola-rs.github.io/polars/py-polars/html/reference/api/polars.Expr.is_between.html#polars.Expr.is_between

polars一书中对此进行了描述:https://pola-rs.github.io/polars-book/user-guide/howcani/timeseries/selecting_dates.html#filtering-按日期范围

它看起来像这样:

start_date = "2022-03-22 00:00:00"
end_date = "2022-03-27 00:00:00"
df = pl.DataFrame(
{
"dates": [
"2022-03-22 00:00:00",
"2022-03-23 00:00:00",
"2022-03-24 00:00:00",
"2022-03-25 00:00:00",
"2022-03-26 00:00:00",
"2022-03-27 00:00:00",
"2022-03-28 00:00:00",
]
}
)
df.with_column(pl.col("dates").is_between(start_date,end_date)).filter(pl.col("is_between") == True)

shape: (4, 2)
┌─────────────────────┬────────────┐
│ dates               ┆ is_between │
│ ---                 ┆ ---        │
│ str                 ┆ bool       │
╞═════════════════════╪════════════╡
│ 2022-03-23 00:00:00 ┆ true       │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2022-03-24 00:00:00 ┆ true       │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2022-03-25 00:00:00 ┆ true       │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ 2022-03-26 00:00:00 ┆ true       │
└─────────────────────┴────────────┘

相关内容

  • 没有找到相关文章

最新更新