假设我们创建一些日期:
import polars as pl
df = pl.DataFrame(
[
pl.Series("start", ["2023-01-01"], dtype=pl.Date).str.to_date(),
pl.Series("end", ["2024-01-01"], dtype=pl.Date).str.to_date(),
]
)
现在我可以根据这些创建日期范围:
dates = pl.date_range(df[0, "start"], df[0, "end"], "1mo", eager=True)
但是我想定义一个函数,它接受几个日期并输出一个范围,作为
pl.date_range
的包装:
def my_date_range(start: pl.Date, end: pl.Date) -> pl.Series:
return pl.date_range(start, end, "1mo", eager=True)
上面的内容没有通过
pyright
/Pylance 进行类型检查,因为:
Argument of type "Date" cannot be assigned to parameter "start" of type "IntoExprColumn | date | datetime" in function "date_range"
Type "Date" is incompatible with type "IntoExprColumn | date | datetime"
"Date" is incompatible with "date"
"Date" is incompatible with "datetime"
"Date" is incompatible with "Expr"
"Date" is incompatible with "Series"
"Date" is incompatible with "str"PylancereportArgumentType
如果我查看
type(df[0, "start"])
,我会看到:
datetime.date
和
pl.Date
不好,因为 isinstance(df[0, "start"], pl.Date) == False
。
我不知道如何导入
datetime.date
以便将其用作类型注释(尝试 import polars.datetime as dt
会引发 No module named 'polars.datetime'
)。
如何做到这一点?或者换句话说:
my_date_range
的日期参数应该如何注释?
由于
datetime.date
与 start
预期的 end
和 pl.date_range
参数兼容,这应该足够了:
import polars as pl
from datetime import date
def my_date_range(start: date, end: date) -> pl.Series:
return pl.date_range(start, end, "1mo", eager=True)