Как ввести подсказку «pl.date»?

Предположим, мы создаем несколько дат:

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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку 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)

Другие вопросы по теме