2
df.filter(pl.col("MyDate") >= "2020-01-01")

不像在熊猫中那样工作。

我找到了解决方法

df.filter(pl.col("MyDate") >= pl.datetime(2020,1,1))

但是如果我需要使用字符串变量,这并不能解决问题。

4

2 回答 2

1

您可以使用python datetime对象。它们将被转换为极坐标literal表达式。

import polars as pl
from datetime import datetime

pl.DataFrame({
    "dates": [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
    "vals": range(3)
}).filter(pl.col("dates") > datetime(2021, 1, 2))

或以显式语法:pl.col("dates") > pl.lit(datetime(2021, 1, 2))

于 2022-02-20T17:14:30.037 回答
1

利用pl.lit(my_date_str).str.strptime(pl.Date, fmt=my_date_fmt))

基于上面的示例:

import polars as pl
from datetime import datetime

df=pl.DataFrame({
    "dates": [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
    "vals": range(3)
})

my_date_str="2021-01-02"
my_date_fmt="%F"
df.filter(pl.col('dates') >= pl.lit(my_date_str).str.strptime(pl.Date, fmt=my_date_fmt))
shape: (2, 2)
┌─────────────────────┬──────┐
│ dates               ┆ vals │
│ ---                 ┆ ---  │
│ datetime[μs]        ┆ i64  │
╞═════════════════════╪══════╡
│ 2021-01-02 00:00:00 ┆ 1    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2021-01-03 00:00:00 ┆ 2    │
└─────────────────────┴──────┘

请确保将格式与您的日期字符串匹配。例如,

my_date_str="01/02/21"
my_date_fmt="%D"

我无法谈论这种方法的性能,但它提供了一种将字符串变量合并到代码中的简单方法。

于 2022-02-21T00:22:23.530 回答