LazyFrame
На этой странице представлен обзор всех публичных методов LazyFrame.
-
Представление графа/запроса ленивых вычислений для DataFrame.
Это позволяет оптимизировать запрос целиком в дополнение к параллельному выполнению и является предпочтительным (и наиболее производительным) режимом работы polars.
- Параметры:
-
-
datadict, Sequence, ndarray, Series, or pandas.DataFrame -
Двумерные данные в различных форматах; входной словарь должен содержать последовательности, генераторы или
range. Последовательность может содержать Series или другие последовательности. -
schemaSequence of str, (str,DataType) pairs, or a {str:DataType,} dict -
Схему LazyFrame можно объявить несколькими способами:
- В виде словаря пар {имя:тип}; если тип равен None, он будет определён автоматически.
- В виде списка имён столбцов; в этом случае типы определяются автоматически.
- В виде списка пар (имя,тип); это эквивалентно форме словаря.
Порядок элементов схемы определяет порядок столбцов во фрейме. При передаче словаря сохраняется порядок добавления элементов. Чтобы переопределить типы данных конкретных столбцов по имени, не меняя порядок столбцов, используйте
schema_overrides.Если вы передадите список имён столбцов, который не соответствует именам в исходных данных, указанные здесь имена заменят исходные. Число имён в схеме должно соответствовать размерности исходных данных.
-
schema_overridesdict, default None -
Позволяет указать или переопределить типы одного или нескольких столбцов; обратите внимание, что любые типы данных, определённые по параметру schema, будут переопределены.
Число элементов в схеме должно соответствовать размерности исходных данных, за исключением случая, когда передаётся последовательность словарей: тогда можно объявить частичную схему, чтобы исключить загрузку определённых полей.
-
strictbool, default True -
Вызывает ошибку, если какое-либо значение
dataне соответствует в точности заданному или определённому типу данных для этого столбца. Если задано значениеFalse, значения, не соответствующие типу данных, приводятся к этому типу или, если приведение невозможно, заменяются на null. -
orient{‘col’, ‘row’}, default None -
Определяет, следует ли интерпретировать двумерные данные как столбцы или строки. Если значение равно None, ориентация определяется по соответствию столбцов и размерности данных. Если это не позволяет однозначно определить ориентацию, используются столбцы.
-
infer_schema_lengthint or None -
Максимальное число строк для сканирования при определении схемы. Если задано значение
None, могут быть просканированы все данные (это может занять много времени). Этот параметр применяется только в том случае, если входные данные представлены последовательностью или генератором строк; остальные входные данные считываются без изменений. -
nan_to_nullbool, default False -
Если данные получены из одного или нескольких массивов numpy, можно преобразовать входные значения np.nan в null. Для всех остальных входных данных параметр ничего не делает.
-
heightint or None, default None -
Позволяет создавать DataFrame с нулевой шириной и заданной высотой. Если переданы данные, гарантирует, что результирующий DataFrame будет иметь эту высоту.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и это не будет считаться несовместимым изменением.
-
Примечания
Непосредственная инициализация
LazyFrame(...)эквивалентнаDataFrame(...).lazy().Примеры
Создание LazyFrame непосредственно из словаря:
>>> data = {"a": [1, 2], "b": [3, 4]} >>> lf = pl.LazyFrame(data) >>> lf.collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 3 │ │ 2 ┆ 4 │ └─────┴─────┘Обратите внимание, что типы данных автоматически определяются как Polars Int64:
>>> lf.collect_schema().dtypes() [Int64, Int64]
Чтобы задать более подробную/конкретную схему фрейма, можно передать параметру
schemaсловарь пар (имя,тип)…>>> data = {"col1": [0, 2], "col2": [3, 7]} >>> lf2 = pl.LazyFrame(data, schema={"col1": pl.Float32, "col2": pl.Int64}) >>> lf2.collect() shape: (2, 2) ┌──────┬──────┐ │ col1 ┆ col2 │ │ --- ┆ --- │ │ f32 ┆ i64 │ ╞══════╪══════╡ │ 0.0 ┆ 3 │ │ 2.0 ┆ 7 │ └──────┴──────┘…последовательность пар (имя,тип)…
>>> data = {"col1": [1, 2], "col2": [3, 4]} >>> lf3 = pl.LazyFrame(data, schema=[("col1", pl.Float32), ("col2", pl.Int64)]) >>> lf3.collect() shape: (2, 2) ┌──────┬──────┐ │ col1 ┆ col2 │ │ --- ┆ --- │ │ f32 ┆ i64 │ ╞══════╪══════╡ │ 1.0 ┆ 3 │ │ 2.0 ┆ 4 │ └──────┴──────┘…или список типизированных Series.
>>> data = [ ... pl.Series("col1", [1, 2], dtype=pl.Float32), ... pl.Series("col2", [3, 4], dtype=pl.Int64), ... ] >>> lf4 = pl.LazyFrame(data) >>> lf4.collect() shape: (2, 2) ┌──────┬──────┐ │ col1 ┆ col2 │ │ --- ┆ --- │ │ f32 ┆ i64 │ ╞══════╪══════╡ │ 1.0 ┆ 3 │ │ 2.0 ┆ 4 │ └──────┴──────┘Создание LazyFrame из массива numpy ndarray с указанием имён столбцов:
>>> import numpy as np >>> data = np.array([(1, 2), (3, 4)], dtype=np.int64) >>> lf5 = pl.LazyFrame(data, schema=["a", "b"], orient="col") >>> lf5.collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 3 │ │ 2 ┆ 4 │ └─────┴─────┘
Создание LazyFrame из списка списков с заданной ориентацией по строкам:
>>> data = [[1, 2, 3], [4, 5, 6]] >>> lf6 = pl.LazyFrame(data, schema=["a", "b", "c"], orient="row") >>> lf6.collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ 1 ┆ 2 ┆ 3 │ │ 4 ┆ 5 ┆ 6 │ └─────┴─────┴─────┘
Методы:
Приблизительный подсчёт уникальных значений.
Возвращает
kстрок с наименьшими значениями.Кэширует результат при достижении этого узла во время выполнения физического плана.
Преобразует типы данных столбцов LazyFrame в указанные типы.
Создаёт пустую копию текущего LazyFrame с числом строк от нуля до 'n'.
Создаёт копию этого LazyFrame.
Материализует этот
LazyFrameвDataFrame.Асинхронно собирает DataFrame в пуле потоков.
Выполняет запрос в потоковом режиме и возвращает генератор, выдающий фрагменты данных.
Определяет схему этого LazyFrame.
Возвращает число ненулевых элементов для каждого столбца.
Создаёт сводку статистических показателей LazyFrame и возвращает DataFrame.
Считывает логический план из файла для создания LazyFrame.
Удаляет столбцы из DataFrame.
Удаляет все строки, содержащие одно или несколько значений NaN.
Удаляет все строки, содержащие одно или несколько значений null.
Выполняет запрос и возвращает
QueryResult.Создаёт строковое представление плана запроса.
Преобразует DataFrame в длинный формат, разворачивая указанные столбцы.
fetchСобирает небольшое число строк для отладки.
Заполняет значения NaN с плавающей точкой.
Заполняет значения null указанным значением или стратегией.
Фильтрует строки LazyFrame по выражению-предикату.
Возвращает первую строку DataFrame.
Выбирает строки этого LazyFrame по указанным индексам.
Выбирает каждую n-ю строку LazyFrame и возвращает результат в виде нового LazyFrame.
Начинает операцию группировки.
Группирует данные по значению времени (или значению индекса типа Int32, Int64).
Возвращает первые
nстрок.Проверяет узел графа вычислений.
Интерполирует промежуточные значения.
Добавляет операцию соединения в логический план.
Выполняет asof-соединение.
Выполняет соединение на основе одного или нескольких предикатов равенства/неравенства.
Возвращает последнюю строку DataFrame.
Возвращает ленивое представление, то есть сам объект.
Возвращает первые
nстрок.Применяет пользовательскую функцию.
Приводит схему LazyFrame к указанной схеме или изменяет её в соответствии с ней.
Вычисляет максимальные значения для столбцов LazyFrame.
Вычисляет средние значения для столбцов LazyFrame.
Вычисляет медианные значения для столбцов LazyFrame.
Преобразует DataFrame из широкого формата в длинный.
Объединяет два отсортированных DataFrame по отсортированному ключу.
Вычисляет минимальные значения для столбцов LazyFrame.
Вычисляет для столбцов LazyFrame число значений null.
Предоставляет структурированный способ применения последовательности пользовательских функций (UDF).
Позволяет изменять ленивый фрейм на этапе построения плана с учётом определённой схемы.
Создаёт сводную таблицу в стиле электронной таблицы в виде DataFrame.
Профилирует LazyFrame.
Вычисляет квантиль для столбцов LazyFrame.
Выполняет запрос удалённо в Polars Cloud.
Удаляет строки, соответствующие заданным выражениям-предикатам.
Переименовывает столбцы.
Обращает порядок строк DataFrame.
Создаёт скользящие группы на основе столбца временного или целочисленного типа.
Выбирает столбцы из этого LazyFrame.
Выбирает столбцы из этого LazyFrame.
Сериализует логический план этого LazyFrame в файл или строку в формате JSON.
Помечает столбец как отсортированный.
Сдвигает значения на указанное число индексов.
Показывает первые
nстрок.Показывает график плана запроса.
Выполняет запрос и вызывает пользовательскую функцию для каждого готового пакета данных.
Выполняет запрос в потоковом режиме и записывает результат в файл CSV.
Записывает DataFrame в виде таблицы Delta.
Записывает LazyFrame в таблицу Iceberg.
Выполняет запрос в потоковом режиме и записывает результат в файл IPC.
Выполняет запрос в потоковом режиме и записывает результат в файл NDJSON.
Выполняет запрос в потоковом режиме и записывает результат в файл Parquet.
Возвращает срез этого DataFrame.
Сортирует LazyFrame по указанным столбцам.
Выполняет SQL-запрос к LazyFrame.
Вычисляет стандартное отклонение для столбцов LazyFrame.
Вычисляет сумму значений в столбцах LazyFrame.
Возвращает последние
nстрок.Возвращает
kстрок с наибольшими значениями.Удаляет повторяющиеся строки из этого LazyFrame.
Разбивает столбцы типа struct на отдельные столбцы для каждого поля.
Преобразует DataFrame из широкого формата в длинный.
Обновляет значения в этом
LazyFrameзначениями изother.Вычисляет дисперсию для столбцов LazyFrame.
Добавляет столбцы в этот LazyFrame.
Добавляет столбцы в этот LazyFrame.
Добавляет внешний контекст в граф вычислений.
Добавляет в индекс 0 столбец со счётчиком строк.
Добавляет индекс строк в качестве первого столбца LazyFrame.
Атрибуты:
Возвращает имена столбцов.
Возвращает типы данных столбцов.
Возвращает упорядоченное соответствие имён столбцов их типам данных.
Возвращает число столбцов.
-
Приблизительный подсчёт уникальных значений.
Устарело с версии 0.20.11: Вместо этого используйте
select(pl.all().approx_n_unique()).Для оценки мощности множества используется алгоритм HyperLogLog++.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.approx_n_unique().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ u32 ┆ u32 │ ╞═════╪═════╡ │ 4 ┆ 2 │ └─────┴─────┘
approx_n_unique() → LazyFrame
-
Возвращает
kстрок с наименьшими значениями.Ненулевые элементы всегда имеют приоритет перед элементами null независимо от значения
reverse. Порядок вывода не гарантируется; если необходимо отсортировать результат, вызовитеsort()после этой функции.Изменено в версии 1.0.0: Параметр
descendingпереименован вreverse.- Параметры:
-
- k
-
Число строк для возврата.
- by
-
Столбец или столбцы, используемые для выбора строк с наименьшими значениями. Принимает выражение. Строки интерпретируются как имена столбцов.
- reverse
-
Рассматривает
kнаибольших элементов столбца или столбцовby(вместоkнаименьших). Для каждого столбца можно задать отдельное значение, передав последовательность логических значений.
См. также
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [2, 1, 1, 3, 2, 1], ... } ... )Получение строк, содержащих 4 наименьших значения в столбце b.
>>> lf.bottom_k(4, by="b").collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ b ┆ 1 │ │ a ┆ 1 │ │ c ┆ 1 │ │ a ┆ 2 │ └─────┴─────┘
Получение строк, содержащих 4 наименьших значения при сортировке по столбцам a и b.
>>> lf.bottom_k(4, by=["a", "b"]).collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ a ┆ 1 │ │ a ┆ 2 │ │ b ┆ 1 │ │ b ┆ 2 │ └─────┴─────┘
bottom_k( k: int, *, by: IntoExpr | Iterable[IntoExpr], reverse: bool | Sequence[bool] = False, ) → LazyFrame-
Кэширует результат при достижении этого узла во время выполнения физического плана.
Не рекомендуется использовать этот метод, поскольку оптимизатор, скорее всего, справится лучше.
cache() → LazyFrame
-
Преобразует типы данных столбцов LazyFrame в указанные типы.
- Параметры:
-
- dtypes
-
Соответствие имён столбцов (или селектора) типам данных либо один тип данных, к которому будут приведены все столбцы.
- strict
-
Вызывает ошибку, если преобразование выполнить не удалось (например, из-за переполнения).
Примеры
>>> from datetime import date >>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": [date(2020, 1, 2), date(2021, 3, 4), date(2022, 5, 6)], ... } ... )Преобразование выбранных столбцов фрейма в указанные типы данных:
>>> lf.cast({"foo": pl.Float32, "bar": pl.UInt8}).collect() shape: (3, 3) ┌─────┬─────┬────────────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ f32 ┆ u8 ┆ date │ ╞═════╪═════╪════════════╡ │ 1.0 ┆ 6 ┆ 2020-01-02 │ │ 2.0 ┆ 7 ┆ 2021-03-04 │ │ 3.0 ┆ 8 ┆ 2022-05-06 │ └─────┴─────┴────────────┘Преобразование всех столбцов фрейма, соответствующих одному типу данных (или группе типов), в другой тип данных:
>>> lf.cast({pl.Date: pl.Datetime}).collect() shape: (3, 3) ┌─────┬─────┬─────────────────────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ datetime[μs] │ ╞═════╪═════╪═════════════════════╡ │ 1 ┆ 6.0 ┆ 2020-01-02 00:00:00 │ │ 2 ┆ 7.0 ┆ 2021-03-04 00:00:00 │ │ 3 ┆ 8.0 ┆ 2022-05-06 00:00:00 │ └─────┴─────┴─────────────────────┘Использование селекторов для задания столбцов, типы которых необходимо преобразовать:
>>> import polars.selectors as cs >>> lf.cast({cs.numeric(): pl.UInt32, cs.temporal(): pl.String}).collect() shape: (3, 3) ┌─────┬─────┬────────────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ u32 ┆ u32 ┆ str │ ╞═════╪═════╪════════════╡ │ 1 ┆ 6 ┆ 2020-01-02 │ │ 2 ┆ 7 ┆ 2021-03-04 │ │ 3 ┆ 8 ┆ 2022-05-06 │ └─────┴─────┴────────────┘Преобразование всех столбцов фрейма в указанный тип данных:
>>> lf.cast(pl.String).collect().to_dict(as_series=False) {'foo': ['1', '2', '3'], 'bar': ['6.0', '7.0', '8.0'], 'ham': ['2020-01-02', '2021-03-04', '2022-05-06']}
cast( dtypes: Mapping[ColumnNameOrSelector | PolarsDataType, PolarsDataType | PythonDataType] | PolarsDataType | DataTypeExpr | Schema, *, strict: bool = True, ) → LazyFrame
class polars.LazyFrame(
data: FrameInitTypes | None = None,
schema: SchemaDefinition | None = None,
*,
schema_overrides: SchemaDict | None = None,
strict: bool = True,
orient: Orientation | None = None,
infer_schema_length: int | None = 100,
nan_to_null: bool = False,
height: int | None = None,
) -
Создаёт пустую копию текущего LazyFrame с количеством строк от нуля до «n».
Возвращает копию с идентичной схемой, но без данных.
- Параметры:
-
- n
-
Количество (пустых) строк, возвращаемых в очищенном фрейме.
См. также
-
clone -
Быстрое глубокое копирование/клонирование.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [None, 2, 3, 4], ... "b": [0.5, None, 2.5, 13], ... "c": [True, True, False, None], ... } ... ) >>> lf.clear().collect() shape: (0, 3) ┌─────┬─────┬──────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool │ ╞═════╪═════╪══════╡ └─────┴─────┴──────┘>>> lf.clear(2).collect() shape: (2, 3) ┌──────┬──────┬──────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ │ null ┆ null ┆ null │ └──────┴──────┴──────┘
clear( n: int = 0, ) → LazyFrame-
Создаёт копию этого LazyFrame.
Это быстрая операция, которая не копирует данные.
См. также
-
clear -
Создаёт пустую копию текущего LazyFrame с идентичной схемой, но без данных.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [None, 2, 3, 4], ... "b": [0.5, None, 2.5, 13], ... "c": [True, True, False, None], ... } ... ) >>> lf.clone() <LazyFrame at ...> -
clone() → LazyFrame
-
Материализует этот
LazyFrameвDataFrame.По умолчанию включены все оптимизации запросов. Отдельные оптимизации можно отключить, задав соответствующему параметру значение
False.- Параметры:
-
- type_coercion
-
Выполнять оптимизацию приведения типов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - predicate_pushdown
-
Выполнять оптимизацию проталкивания предикатов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - projection_pushdown
-
Выполнять оптимизацию проталкивания проекций.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - simplify_expression
-
Выполнять оптимизацию упрощения выражений.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - slice_pushdown
-
Оптимизация проталкивания срезов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subplan_elim
-
Пытается кэшировать ветвящиеся под-планы, возникающие при соединениях таблицы с самой собой или при объединениях.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subexpr_elim
-
Общие подвыражения кэшируются и используются повторно.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - cluster_with_columns
-
Объединять последовательные независимые вызовы with_columns
Устарело с версии 1.30.0: Используйте параметры
optimizations. - collapse_joins
-
Преобразовывать соединение и фильтры в более быстрое соединение
Устарело с версии 1.30.0: Используйте параметры
optimizations. - no_optimization
-
Отключить (определённые) оптимизации.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие названия движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если значение не задано, использовать"in-memory"(это значение по умолчанию может измениться в будущих выпусках). -
"in-memory": использовать движок в памяти — это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и часто превосходя по скорости движок в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется GPU Nvidia иcudf-polars). Для тонкой настройки (например, выбора устройства в системах с несколькими GPU) передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на движок в памяти.
Примечание
Режим GPU считается нестабильным. Не все запросы будут успешно выполняться на GPU, однако при неподдерживаемом выполнении должен происходить незаметный переход к движку по умолчанию.
Запуск с
POLARS_VERBOSE=1предоставит информацию о переходе запроса на другой движок (и его причине). -
- background
-
Запустить запрос в фоновом режиме и получить дескриптор запроса. С его помощью можно получить результат или отменить запрос.
Предупреждение
Фоновый режим считается нестабильным. Он может быть изменён в любой момент без того, чтобы это считалось обратно несовместимым изменением.
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось обратно несовместимым изменением.
- Возвращает:
-
- DataFrame
См. также
-
explain -
Вывести план запроса, выполняемый методом collect.
-
profile -
Собрать LazyFrame и измерить время выполнения каждого узла графа вычислений.
-
polars.collect_all -
Одновременно собрать несколько LazyFrame.
-
polars.Config.set_streaming_chunk_size -
Задать размер потоковых пакетов.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a").agg(pl.all().sum()).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘Сбор в потоковом режиме
>>> lf.group_by("a").agg(pl.all().sum()).collect( ... engine="streaming" ... ) shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘Сбор в режиме GPU
>>> lf.group_by("a").agg(pl.all().sum()).collect(engine="gpu") shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ b ┆ 11 ┆ 10 │ │ a ┆ 4 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘С управлением используемым устройством
>>> lf.group_by("a").agg(pl.all().sum()).collect( ... engine=pl.GPUEngine(device=1) ... ) shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ b ┆ 11 ┆ 10 │ │ a ┆ 4 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘
collect( *, type_coercion: bool = True, predicate_pushdown: bool = True, projection_pushdown: bool = True, simplify_expression: bool = True, slice_pushdown: bool = True, comm_subplan_elim: bool = True, comm_subexpr_elim: bool = True, cluster_with_columns: bool = True, collapse_joins: bool = True, no_optimization: bool = False, engine: EngineType = 'auto', background: bool = False, optimizations: QueryOptFlags = (, ), **_kwargs: Any, ) → DataFrame | InProcessQuery-
Асинхронно собрать DataFrame в пуле потоков.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось обратно несовместимым изменением.
Собирает данные в DataFrame (как
collect()), но вместо непосредственного возврата DataFrame сбор планируется в пуле потоков, а этот метод возвращает управление почти мгновенно.Это может быть полезно, если вы используете
geventилиasyncioи хотите передать управление другим greenlet-задачам/задачам, пока выполняется сбор LazyFrame.- Параметры:
-
- gevent
-
Возвращать оболочку для
gevent.event.AsyncResultвместо Awaitable - engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие названия движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если значение не задано, использовать"in-memory"(это значение по умолчанию может измениться в будущих выпусках). -
"in-memory": использовать движок в памяти — это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и часто превосходя по скорости движок в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется GPU Nvidia иcudf-polars). Для тонкой настройки (например, выбора устройства в системах с несколькими GPU) передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на движок в памяти.
Примечание
Движок GPU не поддерживает асинхронное выполнение и запуск в фоновом режиме. Если включён любой из этих режимов, выполнение на GPU отключается.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось обратно несовместимым изменением.
- Возвращает:
-
-
If gevent=False (default) then returns an awaitable. -
If gevent=True then returns wrapper that has a -
.get(block=True, timeout=None) method.
-
См. также
-
polars.collect_all -
Одновременно собрать несколько LazyFrame.
-
polars.collect_all_async -
Лениво собрать несколько LazyFrame одновременно.
Примечания
В случае ошибки
set_exceptionиспользуется дляasyncio.Future/gevent.event.AsyncResult, и ошибка будет повторно вызвана ими.Примеры
>>> import asyncio >>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> async def main(): ... return await ( ... lf.group_by("a", maintain_order=True) ... .agg(pl.all().sum()) ... .collect_async() ... ) >>> asyncio.run(main()) shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘
collect_async( *, gevent: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → Awaitable[DataFrame] | _GeventDataFrameResult[DataFrame]-
Выполняет запрос в потоковом режиме и возвращает генератор, выдающий фрагменты.
Это позволяет записывать на диск потоковые результаты, размер которых превышает объём оперативной памяти.
Запрос всегда выполняется полностью, если не вызвать
stop, поэтому следует вызывать next, пока не будут получены все фрагменты.Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось обратно несовместимым изменением.
Предупреждение
Этот метод значительно медленнее встроенных приёмников данных. Используйте его только в том случае, если иначе реализовать логику невозможно.
- Параметры:
-
- chunk_size
-
Количество строк, буферизуемых перед выдачей фрагмента.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, выполнение будет немного быстрее. - lazy
-
Запустить запрос при первом запросе пакета.
- engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие названия движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если значение не задано, использовать"streaming". -
"in-memory": перед записью использовать движок в памяти — это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и часто превосходя по скорости движок в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется GPU Nvidia иcudf-polars). Для тонкой настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> for df in lf.collect_batches(): ... print(df)
collect_batches( *, chunk_size: int | None = None, maintain_order: bool = True, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → _CollectBatches-
Определяет схему этого LazyFrame.
Внимание
Вычисление схемы LazyFrame может быть затратной операцией, поскольку может потребовать чтения метаданных с (медленного) дискового хранилища или выполнения сетевых запросов, если данные находятся на удалённом ресурсе.
Примеры
Определение схемы.
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.collect_schema() Schema({'foo': Int64, 'bar': Float64, 'ham': String})Доступ к различным свойствам схемы.
>>> schema = lf.collect_schema() >>> schema["bar"] Float64 >>> schema.names() ['foo', 'bar', 'ham'] >>> schema.dtypes() [Int64, Float64, String] >>> schema.len() 3
collect_schema() → Schema
-
Получает имена столбцов.
- Возвращает:
-
- список строк
-
Список, содержащий имена всех столбцов в порядке следования.
Предупреждение
Чтобы определить имена столбцов LazyFrame, необходимо разрешить его схему, что может быть затратной операцией. Идиоматичный способ разрешить схему — использовать
collect_schema(). Это свойство существует только для симметрии с классом DataFrame.См. также
-
collect_schema -
Schema.names
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6, 7, 8], ... "ham": ["a", "b", "c"], ... } ... ).select("foo", "bar") >>> lf.columns ['foo', 'bar']
property columns: list[str]
-
Возвращает количество ненулевых элементов для каждого столбца.
Примеры
>>> lf = pl.LazyFrame( ... {"a": [1, 2, 3, 4], "b": [1, 2, 1, None], "c": [None, None, None, None]} ... ) >>> lf.count().collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ u32 ┆ u32 ┆ u32 │ ╞═════╪═════╪═════╡ │ 4 ┆ 3 ┆ 0 │ └─────┴─────┴─────┘
count() → LazyFrame
-
Создаёт сводку статистики для LazyFrame и возвращает DataFrame.
- Параметры:
-
- percentiles
-
Один или несколько процентилей, включаемых в сводную статистику. Все значения должны находиться в диапазоне
[0, 1]. -
interpolation{‘nearest’, ‘higher’, ‘lower’, ‘midpoint’, ‘linear’, ‘equiprobable’} -
Метод интерполяции, используемый при вычислении процентилей.
- Возвращает:
-
- DataFrame
Предупреждение
- Этот метод не сохраняет ленивый характер фрейма и
collectокончательный результат. Эта операция может быть затратной. - Мы не гарантируем стабильность результата
describe. В нём отображается статистика, которую мы считаем информативной; в будущем она может измениться. По этой причине не рекомендуется программно использоватьdescribe(в отличие от интерактивного изучения данных). - При выполнении запроса статистики учитываются настройки привязки к движку. После вычисления статистика собирается локально для преобразования результата.
Примечания
Медиана по умолчанию включается как 50-й процентиль.
Примеры
>>> from datetime import date, time >>> lf = pl.LazyFrame( ... { ... "float": [1.0, 2.8, 3.0], ... "int": [40, 50, None], ... "bool": [True, False, True], ... "str": ["zz", "xx", "yy"], ... "date": [date(2020, 1, 1), date(2021, 7, 5), date(2022, 12, 31)], ... "time": [time(10, 20, 30), time(14, 45, 50), time(23, 15, 10)], ... } ... )Показать статистику фрейма по умолчанию:
>>> lf.describe() shape: (9, 7) ┌────────────┬──────────┬──────────┬──────────┬──────┬─────────────────────┬──────────┐ │ statistic ┆ float ┆ int ┆ bool ┆ str ┆ date ┆ time │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ str ┆ str ┆ str │ ╞════════════╪══════════╪══════════╪══════════╪══════╪═════════════════════╪══════════╡ │ count ┆ 3.0 ┆ 2.0 ┆ 3.0 ┆ 3 ┆ 3 ┆ 3 │ │ null_count ┆ 0.0 ┆ 1.0 ┆ 0.0 ┆ 0 ┆ 0 ┆ 0 │ │ mean ┆ 2.266667 ┆ 45.0 ┆ 0.666667 ┆ null ┆ 2021-07-02 16:00:00 ┆ 16:07:10 │ │ std ┆ 1.101514 ┆ 7.071068 ┆ null ┆ null ┆ null ┆ null │ │ min ┆ 1.0 ┆ 40.0 ┆ 0.0 ┆ xx ┆ 2020-01-01 ┆ 10:20:30 │ │ 25% ┆ 2.8 ┆ 40.0 ┆ null ┆ null ┆ 2021-07-05 ┆ 14:45:50 │ │ 50% ┆ 2.8 ┆ 50.0 ┆ null ┆ null ┆ 2021-07-05 ┆ 14:45:50 │ │ 75% ┆ 3.0 ┆ 50.0 ┆ null ┆ null ┆ 2022-12-31 ┆ 23:15:10 │ │ max ┆ 3.0 ┆ 50.0 ┆ 1.0 ┆ zz ┆ 2022-12-31 ┆ 23:15:10 │ └────────────┴──────────┴──────────┴──────────┴──────┴─────────────────────┴──────────┘
Настроить отображаемые процентили, используя линейную интерполяцию:
>>> with pl.Config(tbl_rows=12): ... lf.describe( ... percentiles=[0.1, 0.3, 0.5, 0.7, 0.9], ... interpolation="linear", ... ) shape: (11, 7) ┌────────────┬──────────┬──────────┬──────────┬──────┬─────────────────────┬──────────┐ │ statistic ┆ float ┆ int ┆ bool ┆ str ┆ date ┆ time │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ str ┆ str ┆ str │ ╞════════════╪══════════╪══════════╪══════════╪══════╪═════════════════════╪══════════╡ │ count ┆ 3.0 ┆ 2.0 ┆ 3.0 ┆ 3 ┆ 3 ┆ 3 │ │ null_count ┆ 0.0 ┆ 1.0 ┆ 0.0 ┆ 0 ┆ 0 ┆ 0 │ │ mean ┆ 2.266667 ┆ 45.0 ┆ 0.666667 ┆ null ┆ 2021-07-02 16:00:00 ┆ 16:07:10 │ │ std ┆ 1.101514 ┆ 7.071068 ┆ null ┆ null ┆ null ┆ null │ │ min ┆ 1.0 ┆ 40.0 ┆ 0.0 ┆ xx ┆ 2020-01-01 ┆ 10:20:30 │ │ 10% ┆ 1.36 ┆ 41.0 ┆ null ┆ null ┆ 2020-04-20 ┆ 11:13:34 │ │ 30% ┆ 2.08 ┆ 43.0 ┆ null ┆ null ┆ 2020-11-26 ┆ 12:59:42 │ │ 50% ┆ 2.8 ┆ 45.0 ┆ null ┆ null ┆ 2021-07-05 ┆ 14:45:50 │ │ 70% ┆ 2.88 ┆ 47.0 ┆ null ┆ null ┆ 2022-02-07 ┆ 18:09:34 │ │ 90% ┆ 2.96 ┆ 49.0 ┆ null ┆ null ┆ 2022-09-13 ┆ 21:33:18 │ │ max ┆ 3.0 ┆ 50.0 ┆ 1.0 ┆ zz ┆ 2022-12-31 ┆ 23:15:10 │ └────────────┴──────────┴──────────┴──────────┴──────┴─────────────────────┴──────────┘
describe( percentiles: Sequence[float] | float | None = (0.25, 0.5, 0.75, ), *, interpolation: QuantileMethod = 'nearest', ) → DataFrame-
Читает логический план из файла для создания LazyFrame.
- Параметры:
-
- source
-
Путь к файлу или файловоподобный объект (под файловоподобными объектами подразумеваются объекты с методом
read(), например обработчик файла (например, созданный встроенной функциейopen) илиBytesIO). - format
-
Формат, в котором был сериализован LazyFrame. Возможные варианты:
-
"binary": десериализовать из двоичного формата (байты). Используется по умолчанию. -
"json": десериализовать из формата JSON (строка).
-
Предупреждение
Эта функция использует
pickle, если логический план содержит Python UDF, и поэтому наследует связанные с ним риски безопасности. Десериализация может выполнить произвольный код, поэтому её следует выполнять только для доверенных данных.См. также
Примечания
Сериализация нестабильна между версиями Polars: LazyFrame, сериализованный в одной версии Polars, может быть невозможно десериализовать в другой.
Примеры
>>> import io >>> lf = pl.LazyFrame({"a": [1, 2, 3]}).sum() >>> bytes = lf.serialize() >>> pl.LazyFrame.deserialize(io.BytesIO(bytes)).collect() shape: (1, 1) ┌─────┐ │ a │ │ --- │ │ i64 │ ╞═════╡ │ 6 │ └─────┘
classmethod deserialize( source: str | bytes | Path | IOBase, *, format: SerializationFormat = 'binary', ) → LazyFrame-
Удаляет столбцы из DataFrame.
- Параметры:
-
- *columns
-
Имена столбцов, которые нужно удалить из фрейма данных. Принимает селекторы столбцов.
- strict
-
Проверять, что все имена столбцов существуют в текущей схеме, и вызывать исключение, если это не так.
Примеры
Удаление одного столбца с помощью его имени.
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.drop("ham").collect() shape: (3, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 1 ┆ 6.0 │ │ 2 ┆ 7.0 │ │ 3 ┆ 8.0 │ └─────┴─────┘Удаление нескольких столбцов с помощью селектора.
>>> import polars.selectors as cs >>> lf.drop(cs.numeric()).collect() shape: (3, 1) ┌─────┐ │ ham │ │ --- │ │ str │ ╞═════╡ │ a │ │ b │ │ c │ └─────┘
Использование позиционных аргументов для удаления нескольких столбцов.
>>> lf.drop("foo", "ham").collect() shape: (3, 1) ┌─────┐ │ bar │ │ --- │ │ f64 │ ╞═════╡ │ 6.0 │ │ 7.0 │ │ 8.0 │ └─────┘
drop( *columns: ColumnNameOrSelector | Iterable[ColumnNameOrSelector], strict: bool = True, ) → LazyFrame-
Удаляет все строки, содержащие одно или несколько значений NaN.
Исходный порядок оставшихся строк сохраняется.
- Параметры:
-
- subset
-
Имя или имена столбцов, значения NaN в которых учитываются; если задано
None(значение по умолчанию), используются все столбцы (обратите внимание, что NaN могут содержаться только в столбцах с числами с плавающей точкой).
См. также
Примечания
Значение NaN не то же самое, что значение null. Чтобы удалить значения null, используйте
drop_nulls().Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [-20.5, float("nan"), 80.0], ... "bar": [float("nan"), 110.0, 25.5], ... "ham": ["xxx", "yyy", None], ... } ... )По умолчанию этот метод удаляет строки, если хотя бы одно значение в строке равно NaN:
>>> lf.drop_nans().collect() shape: (1, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ str │ ╞══════╪══════╪══════╡ │ 80.0 ┆ 25.5 ┆ null │ └──────┴──────┴──────┘
Можно ограничить проверку подмножеством столбцов, задав их имена или селектор. Например, удалим строки, содержащие NaN в столбце «bar»:
>>> lf.drop_nans(subset=["bar"]).collect() shape: (2, 3) ┌──────┬───────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ str │ ╞══════╪═══════╪══════╡ │ NaN ┆ 110.0 ┆ yyy │ │ 80.0 ┆ 25.5 ┆ null │ └──────┴───────┴──────┘
Чтобы удалить строку, только если все значения равны NaN, требуется другой способ:
>>> lf = pl.LazyFrame( ... { ... "a": [float("nan"), float("nan"), float("nan"), float("nan")], ... "b": [10.0, 2.5, float("nan"), 5.25], ... "c": [65.75, float("nan"), float("nan"), 10.5], ... } ... ) >>> lf.filter(~pl.all_horizontal(pl.all().is_nan())).collect() shape: (3, 3) ┌─────┬──────┬───────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ f64 │ ╞═════╪══════╪═══════╡ │ NaN ┆ 10.0 ┆ 65.75 │ │ NaN ┆ 2.5 ┆ NaN │ │ NaN ┆ 5.25 ┆ 10.5 │ └─────┴──────┴───────┘
drop_nans( subset: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, ) → LazyFrame-
Удаляет все строки, содержащие одно или несколько значений null.
Исходный порядок оставшихся строк сохраняется.
См. также
Примечания
Значение null не то же самое, что значение NaN. Чтобы удалить значения NaN, используйте
drop_nans().Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6, None, 8], ... "ham": ["a", "b", None], ... } ... )По умолчанию этот метод удаляет строки, если хотя бы одно значение в строке равно null:
>>> lf.drop_nulls().collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ └─────┴─────┴─────┘
Можно ограничить проверку подмножеством столбцов, задав их имена или селектор. Например, удалим строки, содержащие null хотя бы в одном целочисленном столбце:
>>> import polars.selectors as cs >>> lf.drop_nulls(subset=cs.integer()).collect() shape: (2, 3) ┌─────┬─────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪══════╡ │ 1 ┆ 6 ┆ a │ │ 3 ┆ 8 ┆ null │ └─────┴─────┴──────┘
Чтобы удалить строку, только если все значения равны null, требуется другой способ:
>>> lf = pl.LazyFrame( ... { ... "a": [None, None, None, None], ... "b": [1, 2, None, 1], ... "c": [1, None, None, 1], ... } ... ) >>> lf.filter(~pl.all_horizontal(pl.all().is_null())).collect() shape: (3, 3) ┌──────┬─────┬──────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ null ┆ i64 ┆ i64 │ ╞══════╪═════╪══════╡ │ null ┆ 1 ┆ 1 │ │ null ┆ 2 ┆ null │ │ null ┆ 1 ┆ 1 │ └──────┴─────┴──────┘
drop_nulls( subset: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, ) → LazyFrame-
Получает типы данных столбцов.
- Возвращает:
-
- список DataType
-
Список, содержащий типы данных всех столбцов в порядке следования.
Предупреждение
Чтобы определить типы данных LazyFrame, необходимо разрешить его схему, что может быть затратной операцией. Идиоматичный способ разрешить схему — использовать
collect_schema(). Это свойство существует только для симметрии с классом DataFrame.См. также
-
collect_schema -
Schema.dtypes
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.dtypes [Int64, Float64, String]
property dtypes: list[DataType]
-
-
Выполняет запрос и сохраняет результат в
QueryResult.Этот способ материализации
LazyFrameне гарантирует, где именно будет материализован результат. Для GPU-движка это может быть GPU, для распределённого движка — кластер или удалённое хранилище, а потоковый движок может выгрузить результат на диск, если это потребуется.QueryResultвсегда можно использовать как новыйLazyFrame, вызвав.lazy- Параметры:
-
- engine
-
Выбор движка для обработки запроса; параметр необязательный. Также можно передать экземпляр
Engine. В настоящее время, если задано значение"auto"(по умолчанию), запрос выполняется с помощью внутрипамятного движка Polars. Polars также попытается использовать движок, заданный переменной окруженияPOLARS_ENGINE_AFFINITY. Если выбранный движок не может выполнить запрос, он выполняется с помощью внутрипамятного движка Polars. Если задано значение"gpu", используется GPU-движок. Для более точной настройки GPU-движка, например для выбора устройства в системе с несколькими устройствами, можно передать объектGPUEngineс параметрами конфигурации.Примечание
Режим GPU считается нестабильным. Не все запросы могут успешно выполняться на GPU, однако при отсутствии поддержки выполнения они должны незаметно переключаться на движок по умолчанию.
Запуск с
POLARS_VERBOSE=1позволит узнать, переключился ли запрос на другой движок (и почему). - optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось несовместимым изменением.
- Возвращает:
-
- QueryResult
См. также
-
explain -
Выводит план запроса, который выполняется при вызове collect.
-
profile -
Собирает LazyFrame и измеряет время выполнения каждого узла графа вычислений.
-
polars.collect_all -
Одновременно собирает несколько LazyFrame.
-
polars.Config.set_streaming_chunk_size -
Задаёт размер потоковых пакетов.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a").agg(pl.all().sum()).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘Сбор в потоковом режиме
>>> lf.group_by("a").agg(pl.all().sum()).collect( ... engine="streaming" ... ) shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘Сбор в режиме GPU
execute( *, optimizations: QueryOptFlags = (, ), engine: EngineType = 'auto', **_kwargs: Any, ) → QueryResult-
Создаёт строковое представление плана запроса.
Различные оптимизации можно включать и отключать.
- Параметры:
-
-
format{‘plain’, ‘tree’} -
Формат отображения логического плана.
- optimized
-
Возвращает оптимизированный план запроса. По умолчанию —
True. Если задано значениеTrue, последующие флаги оптимизации определяют, какие оптимизации будут выполнены. - type_coercion
-
Выполняет оптимизацию приведения типов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - predicate_pushdown
-
Выполняет оптимизацию проталкивания предикатов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - projection_pushdown
-
Выполняет оптимизацию проталкивания проекций.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - simplify_expression
-
Выполняет оптимизацию упрощения выражений.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - slice_pushdown
-
Оптимизация проталкивания срезов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subplan_elim
-
Пытается кэшировать ветвящиеся подзапросы, возникающие при самосоединениях или объединениях.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subexpr_elim
-
Общие подвыражения кэшируются и используются повторно.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - cluster_with_columns
-
Объединяет последовательные независимые вызовы with_columns
Устарело с версии 1.30.0: Используйте параметры
optimizations. - collapse_joins
-
Объединяет соединение и фильтры в более быстрое соединение
Устарело с версии 1.30.0: Используйте параметры
optimizations. - streaming
-
Неиспользуемый параметр, сохранённый для обратной совместимости.
Устарело с версии 1.30.0: Вместо него используйте параметр
engine. - engine
-
Выбор движка для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использует движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если значение не задано, используется"in-memory"(это значение по умолчанию может измениться в будущем выпуске). -
"in-memory": использует внутрипамятный движок, который является движком по умолчанию. -
"streaming": использует потоковый движок, обрабатывающий запросы пакетами, что снижает нагрузку на память и часто обеспечивает более высокую производительность, чем внутрипамятный движок. Вскоре он станет движком Polars по умолчанию. -
"gpu": использует GPU-движок CUDA (требуется GPU Nvidia иcudf-polars). Для более точной настройки (например, выбора устройства в системах с несколькими GPU) передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на внутрипамятный движок.
Примечание
Режим GPU считается нестабильным. Не все запросы могут успешно выполняться на GPU, однако при отсутствии поддержки выполнения они должны незаметно переключаться на движок по умолчанию.
Запуск с
POLARS_VERBOSE=1позволит узнать, переключился ли запрос на другой движок (и почему). -
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось несовместимым изменением.
- tree_format
-
Форматирует вывод в виде дерева.
Устарело с версии 0.20.30: Вместо этого используйте
format="tree".
-
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a", maintain_order=True).agg(pl.all().sum()).sort( ... "a" ... ).explain()
explain( *, format: ExplainFormat = 'plain', optimized: bool = True, type_coercion: bool = True, predicate_pushdown: bool = True, projection_pushdown: bool = True, simplify_expression: bool = True, slice_pushdown: bool = True, comm_subplan_elim: bool = True, comm_subexpr_elim: bool = True, cluster_with_columns: bool = True, collapse_joins: bool = True, streaming: bool = False, engine: EngineType = 'auto', tree_format: bool | None = None, optimizations: QueryOptFlags = (, ), ) → str-
Преобразует DataFrame в длинный формат, разворачивая указанные столбцы.
- Параметры:
-
- columns
-
Имена столбцов, выражения или селектор, определяющий столбцы. Исходные столбцы, которые разворачиваются, должны иметь тип данных
ListилиArray. - *more_columns
-
Дополнительные имена столбцов для разворачивания, указанные в виде позиционных аргументов.
- empty_as_null
-
Разворачивает пустой список/массив в
null. - keep_nulls
-
Разворачивает список/массив
nullвnull.
Примеры
>>> lf = pl.LazyFrame( ... { ... "letters": ["a", "a", "b", "c"], ... "numbers": [[1], [2, 3], [4, 5], [6, 7, 8]], ... } ... ) >>> lf.explode("numbers", empty_as_null=False).collect() shape: (8, 2) ┌─────────┬─────────┐ │ letters ┆ numbers │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════════╪═════════╡ │ a ┆ 1 │ │ a ┆ 2 │ │ a ┆ 3 │ │ b ┆ 4 │ │ b ┆ 5 │ │ c ┆ 6 │ │ c ┆ 7 │ │ c ┆ 8 │ └─────────┴─────────┘
explode( columns: ColumnNameOrSelector | Iterable[ColumnNameOrSelector], *more_columns: ColumnNameOrSelector, empty_as_null: bool = <object object>, keep_nulls: bool = True, ) → LazyFrame-
Собирает небольшое количество строк для отладки.
Предупреждение
Это исключительно вспомогательная функция для отладки запросов на небольшом количестве строк; её не следует использовать в производственном коде.
Примечания
Это похоже на операцию
collect(), но она переопределяет количество строк, считываемых каждой операцией сканирования. Обратите внимание:fetchне гарантирует итоговое количество строк в DataFrame. На итоговое число строк влияют фильтры, операции соединения и количество строк, доступных в сканируемых данных (особенно это касается соединений: они могут вернуть пустой результат, еслиn_rowsслишком мало, поскольку ключи соединения могут отсутствовать).
fetch( n_rows: int = 500, **kwargs: Any, ) → DataFrame-
Заполняет значения NaN с плавающей точкой.
- Параметры:
-
- value
-
Значение для заполнения значений NaN.
См. также
Примечания
Значение NaN отличается от null. Чтобы заполнить значения null, используйте
fill_null().Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1.5, 2, float("nan"), 4], ... "b": [0.5, 4, float("nan"), 13], ... } ... ) >>> lf.fill_nan(99).collect() shape: (4, 2) ┌──────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞══════╪══════╡ │ 1.5 ┆ 0.5 │ │ 2.0 ┆ 4.0 │ │ 99.0 ┆ 99.0 │ │ 4.0 ┆ 13.0 │ └──────┴──────┘
fill_nan( value: int | float | Expr | None, ) → LazyFrame-
Заполняет значения null указанным значением или стратегией.
- Параметры:
-
- value
-
Значение для заполнения null.
-
strategy{None, ‘forward’, ‘backward’, ‘min’, ‘max’, ‘mean’, ‘zero’, ‘one’} -
Стратегия заполнения null.
- limit
-
Количество последовательных значений null для заполнения при использовании стратегии «forward» или «backward».
- matches_supertype
-
Заполняет все соответствующие супертипы литерала заполнения
value.
См. также
Примечания
Значение null отличается от NaN. Чтобы заполнить значения NaN, используйте
fill_nan().Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, None, 4], ... "b": [0.5, 4, None, 13], ... } ... ) >>> lf.fill_null(99).collect() shape: (4, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪══════╡ │ 1 ┆ 0.5 │ │ 2 ┆ 4.0 │ │ 99 ┆ 99.0 │ │ 4 ┆ 13.0 │ └─────┴──────┘ >>> lf.fill_null(strategy="forward").collect() shape: (4, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪══════╡ │ 1 ┆ 0.5 │ │ 2 ┆ 4.0 │ │ 2 ┆ 4.0 │ │ 4 ┆ 13.0 │ └─────┴──────┘>>> lf.fill_null(strategy="max").collect() shape: (4, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪══════╡ │ 1 ┆ 0.5 │ │ 2 ┆ 4.0 │ │ 4 ┆ 13.0 │ │ 4 ┆ 13.0 │ └─────┴──────┘
>>> lf.fill_null(strategy="zero").collect() shape: (4, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪══════╡ │ 1 ┆ 0.5 │ │ 2 ┆ 4.0 │ │ 0 ┆ 0.0 │ │ 4 ┆ 13.0 │ └─────┴──────┘
fill_null( value: Any | Expr | None = None, strategy: FillNullStrategy | None = None, limit: int | None = None, *, matches_supertype: bool = True, ) → LazyFrame-
Фильтрует строки LazyFrame по выражению-предикату.
Исходный порядок оставшихся строк сохраняется.
Строки, для которых предикат фильтрации не вычисляется в True, отбрасываются (включая строки, для которых предикат вычисляется в
null).- Параметры:
-
- predicates
-
Выражение, результатом которого является булев Series.
- constraints
-
Фильтры столбцов; используйте
name = valueдля фильтрации столбцов по заданному значению. Каждое ограничение работает так же, какpl.col(name).eq(value), и неявно объединяется с другими условиями фильтра с помощью&.
См. также
Примечания
Если вы переходите с Pandas и выполняете фильтрацию на основе сравнения двух или более столбцов, обратите внимание: в Polars любое сравнение, в котором участвуют значения
null, возвращает результатnull, а не логическое значение True или False. Поэтому такие строки не сохраняются. Чтобы избежать неожиданного поведения, правильно обрабатывайте значения null (см. примеры ниже).Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3, None, 4, None, 0], ... "bar": [6, 7, 8, None, None, 9, 0], ... "ham": ["a", "b", "c", None, "d", "e", "f"], ... } ... )Фильтрация по одному условию:
>>> lf.filter(pl.col("foo") > 1).collect() shape: (3, 3) ┌─────┬──────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪══════╪═════╡ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ │ 4 ┆ null ┆ d │ └─────┴──────┴─────┘Фильтрация по нескольким условиям:
>>> lf.filter((pl.col("foo") < 3) & (pl.col("ham") == "a")).collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ └─────┴─────┴─────┘Передача нескольких фильтров с использованием синтаксиса
*args:>>> lf.filter( ... pl.col("foo") == 1, ... pl.col("ham") == "a", ... ).collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ └─────┴─────┴─────┘Передача нескольких фильтров с использованием синтаксиса
**kwargs:>>> lf.filter(foo=1, ham="a").collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ └─────┴─────┴─────┘
Фильтрация по условию OR:
>>> lf.filter( ... (pl.col("foo") == 1) | (pl.col("ham") == "c"), ... ).collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 3 ┆ 8 ┆ c │ └─────┴─────┴─────┘Фильтрация путём сравнения двух столбцов друг с другом
>>> lf.filter( ... pl.col("foo") == pl.col("bar"), ... ).collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 0 ┆ 0 ┆ f │ └─────┴─────┴─────┘>>> lf.filter( ... pl.col("foo") != pl.col("bar"), ... ).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ └─────┴─────┴─────┘Обратите внимание: строка со значениями
Noneотфильтровывается; использованиеne_missingобеспечивает равенство при сравнении значений null, что позволяет получить поведение, аналогичное Pandas:>>> lf.filter( ... pl.col("foo").ne_missing(pl.col("bar")), ... ).collect() shape: (5, 3) ┌──────┬──────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ │ 4 ┆ null ┆ d │ │ null ┆ 9 ┆ e │ └──────┴──────┴─────┘
filter( *predicates: IntoExprColumn | Iterable[IntoExprColumn] | bool | list[bool] | np.ndarray[Any, Any], **constraints: Any, ) → LazyFrame-
Возвращает первую строку DataFrame.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 3, 5], ... "b": [2, 4, 6], ... } ... ) >>> lf.first().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 2 │ └─────┴─────┘
first() → LazyFrame
-
Выбирает строки этого LazyFrame по заданным индексам.
Предупреждение
Эта функциональность экспериментальная. Она может быть изменена в любой момент без того, чтобы это считалось несовместимым изменением.
- Параметры:
-
- indices
-
Индексы выбираемых строк.
Поскольку
LazySeriesотсутствует, в качестве индексов также разрешено передаватьLazyFrameшириной в один элемент. - null_on_oob
-
Если значение истинно, при выходе индекса за границы вместо ошибки будет создана строка null.
Примеры
>>> lf = pl.LazyFrame({"x": [2, 1, 0], "s": ["foo", "bar", "baz"]}) >>> lf.gather([2, 0, 0]).collect() shape: (3, 2) ┌─────┬─────┐ │ x ┆ s │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════╪═════╡ │ 0 ┆ baz │ │ 2 ┆ foo │ │ 2 ┆ foo │ └─────┴─────┘>>> lf.gather([0, 10, 1], null_on_oob=True).collect() shape: (3, 2) ┌──────┬──────┐ │ x ┆ s │ │ --- ┆ --- │ │ i64 ┆ str │ ╞══════╪══════╡ │ 2 ┆ foo │ │ null ┆ null │ │ 1 ┆ bar │ └──────┴──────┘
>>> idxs = pl.LazyFrame({"i": [1, 10, 0], "b": [True, False, True]}) >>> lf.gather(idxs.filter(pl.col.b).select(pl.col.i)).collect() shape: (2, 2) ┌─────┬─────┐ │ x ┆ s │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════╪═════╡ │ 1 ┆ bar │ │ 2 ┆ foo │ └─────┴─────┘
gather( indices: int | Sequence[int] | IntoExpr | Series | np.ndarray[Any, Any] | LazyFrame, *, null_on_oob: bool = False, ) → LazyFrame-
Выбирает каждую n-ю строку LazyFrame и возвращает результат в виде нового LazyFrame.
- Параметры:
-
- n
-
Выбирает каждую n-ю строку.
- offset
-
Начальный индекс.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [5, 6, 7, 8], ... } ... ) >>> lf.gather_every(2).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 5 │ │ 3 ┆ 7 │ └─────┴─────┘ >>> lf.gather_every(2, offset=1).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 2 ┆ 6 │ │ 4 ┆ 8 │ └─────┴─────┘
gather_every( n: int, offset: int = 0, ) → LazyFrame-
Начинает операцию группировки.
- Параметры:
-
- *by
-
Столбец или столбцы для группировки. Принимает выражения. Строки интерпретируются как имена столбцов.
- maintain_order
-
Гарантирует, что порядок групп соответствует порядку входных данных. Работает медленнее, чем группировка по умолчанию. Значение
Trueисключает возможность выполнения с разбиением на разделы. - **named_by
-
Дополнительные столбцы для группировки, задаваемые именованными аргументами. Столбцам будут присвоены имена соответствующих аргументов.
Примеры
Группировка по одному столбцу и вызов
aggдля вычисления сгруппированной суммы другого столбца.>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "c"], ... "b": [1, 2, 1, 3, 3], ... "c": [5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a").agg(pl.col("b").sum()).collect() shape: (3, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ a ┆ 2 │ │ b ┆ 5 │ │ c ┆ 3 │ └─────┴─────┘Задайте
maintain_order=True, чтобы порядок групп соответствовал порядку входных данных.>>> lf.group_by("a", maintain_order=True).agg(pl.col("c")).collect() shape: (3, 2) ┌─────┬───────────┐ │ a ┆ c │ │ --- ┆ --- │ │ str ┆ list[i64] │ ╞═════╪═══════════╡ │ a ┆ [5, 3] │ │ b ┆ [4, 2] │ │ c ┆ [1] │ └─────┴───────────┘Группировка по нескольким столбцам с передачей списка имён столбцов.
>>> lf.group_by(["a", "b"]).agg(pl.max("c")).collect() shape: (4, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 1 ┆ 5 │ │ b ┆ 2 ┆ 4 │ │ b ┆ 3 ┆ 2 │ │ c ┆ 3 ┆ 1 │ └─────┴─────┴─────┘Также можно передать несколько столбцов в виде позиционных аргументов. Принимаются и выражения.
>>> lf.group_by("a", pl.col("b") // 2).agg( ... pl.col("c").mean() ... ).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ f64 │ ╞═════╪═════╪═════╡ │ a ┆ 0 ┆ 4.0 │ │ b ┆ 1 ┆ 3.0 │ │ c ┆ 1 ┆ 1.0 │ └─────┴─────┴─────┘
group_by( *by: IntoExpr | Iterable[IntoExpr], maintain_order: bool = False, **named_by: IntoExpr, ) → LazyGroupBy-
Группирует по значению времени (или индекса типа Int32, Int64).
Вычисляются временные окна, и строки распределяются по ним. В отличие от обычной группировки, одна строка может входить в несколько групп. По умолчанию окна имеют следующий вид:
- [начало, начало + период)
- [начало + шаг, начало + шаг + период)
- [начало + 2*шаг, начало + 2*шаг + период)
- …
где
startопределяется параметрамиstart_by,offset,everyи самой ранней точкой данных. Подробности см. в описании аргументаstart_by.Предупреждение
Столбец индекса должен быть отсортирован по возрастанию. Если передан
group_by, столбец индекса должен быть отсортирован по возрастанию внутри каждой группы.Изменено в версии 0.20.14: Параметр
byбыл переименован вgroup_by.- Параметры:
-
- index_column
-
Столбец, используемый для группировки по временному окну. Обычно имеет тип Date/Datetime. Этот столбец должен быть отсортирован по возрастанию (или, если указан
group_by, отсортирован по возрастанию внутри каждой группы).При динамической группировке по индексам тип данных должен быть одним из {Int32, Int64}. Обратите внимание: Int32 временно приводится к Int64, поэтому при необходимости высокой производительности используйте столбец Int64.
- every
-
интервал окна
- period
-
длина окна; если значение None, она равна «every»
- offset
-
смещение окна; не действует, если
start_byравно ‘datapoint’. По умолчанию равно нулю. - include_boundaries
-
Добавляет нижнюю и верхнюю границы окна в столбцы “_lower_boundary” и “_upper_boundary”. Это повлияет на производительность, поскольку затрудняет параллельную обработку.
-
closed{‘left’, ‘right’, ‘both’, ‘none’} -
Определяет, какие границы временного интервала включены.
-
label{‘left’, ‘right’, ‘datapoint’} -
Определяет метку окна:
- ‘left’: нижняя граница окна
- ‘right’: верхняя граница окна
- ‘datapoint’: первое значение столбца индекса в данном окне. Если метка не должна совпадать с одной из границ, выберите этот вариант для максимальной производительности.
- group_by
-
Дополнительно группирует по этому столбцу или столбцам.
-
start_by{‘window’, ‘datapoint’, ‘monday’, ‘tuesday’, ‘wednesday’, ‘thursday’, ‘friday’, ‘saturday’, ‘sunday’} -
Стратегия определения начала первого окна.
- ‘window’: берёт наиболее раннюю отметку времени, округляет её с помощью
every, а затем прибавляетoffset. Обратите внимание: недельные окна начинаются в понедельник. - ‘datapoint’: начинает с первой встретившейся точки данных.
-
день недели (действует только в том случае, если
everyсодержит'w'):- ‘monday’: начинает окно с понедельника перед первой точкой данных.
- ‘tuesday’: начинает окно со вторника перед первой точкой данных.
- …
- ‘sunday’: начинает окно с воскресенья перед первой точкой данных.
Затем окно сдвигается назад, пока самая ранняя точка данных не окажется внутри него или перед ним.
- ‘window’: берёт наиболее раннюю отметку времени, округляет её с помощью
- Возвращает:
-
- LazyGroupBy
-
Объект, для агрегирования групп которого можно вызвать
.agg. Результат будет отсортирован поindex_column(но если переданы столбцыgroup_by, сортировка выполняется только внутри каждой группы).
См. также
Примечания
-
Если вы переходите с pandas, то
# polars df.group_by_dynamic("ts", every="1d").agg(pl.col("value").sum())эквивалентно
# pandas df.set_index("ts").resample("D")["value"].sum().reset_index()но обратите внимание: в отличие от pandas, polars не добавляет дополнительные строки для пустых окон. Если требуется равномерное распределение
index_column, используйте эту функцию вместе сDataFrame.upsample(). -
Аргументы
every,periodиoffsetзадаются с помощью следующих строковых обозначений:- 1ns (1 наносекунда)
- 1us (1 микросекунда)
- 1ms (1 миллисекунда)
- 1s (1 секунда)
- 1m (1 минута)
- 1h (1 час)
- 1d (1 календарный день)
- 1w (1 календарная неделя)
- 1mo (1 календарный месяц)
- 1q (1 календарный квартал)
- 1y (1 календарный год)
- 1i (1 единица индекса)
Их можно комбинировать (кроме
every): “3d12h4m25s” # 3 дня, 12 часов, 4 минуты и 25 секундПод «календарным днём» понимается соответствующее время следующего дня (который может длиться не 24 часа из-за перехода на летнее время). То же относится к «календарной неделе», «календарному месяцу», «календарному кварталу» и «календарному году».
При динамической группировке по столбцу целых чисел окна задаются следующим образом:
- “1i” # длина 1
- “10i” # длина 10
Примеры
>>> from datetime import datetime >>> lf = pl.LazyFrame( ... { ... "time": pl.datetime_range( ... start=datetime(2021, 12, 16), ... end=datetime(2021, 12, 16, 3), ... interval="30m", ... eager=True, ... ), ... "n": range(7), ... } ... ) >>> lf.collect() shape: (7, 2) ┌─────────────────────┬─────┐ │ time ┆ n │ │ --- ┆ --- │ │ datetime[μs] ┆ i64 │ ╞═════════════════════╪═════╡ │ 2021-12-16 00:00:00 ┆ 0 │ │ 2021-12-16 00:30:00 ┆ 1 │ │ 2021-12-16 01:00:00 ┆ 2 │ │ 2021-12-16 01:30:00 ┆ 3 │ │ 2021-12-16 02:00:00 ┆ 4 │ │ 2021-12-16 02:30:00 ┆ 5 │ │ 2021-12-16 03:00:00 ┆ 6 │ └─────────────────────┴─────┘Группировка по окнам длительностью 1 час.
>>> lf.group_by_dynamic("time", every="1h", closed="right").agg( ... pl.col("n") ... ).collect() shape: (4, 2) ┌─────────────────────┬───────────┐ │ time ┆ n │ │ --- ┆ --- │ │ datetime[μs] ┆ list[i64] │ ╞═════════════════════╪═══════════╡ │ 2021-12-15 23:00:00 ┆ [0] │ │ 2021-12-16 00:00:00 ┆ [1, 2] │ │ 2021-12-16 01:00:00 ┆ [3, 4] │ │ 2021-12-16 02:00:00 ┆ [5, 6] │ └─────────────────────┴───────────┘Границы окон также можно добавить в результат агрегирования.
>>> lf.group_by_dynamic( ... "time", every="1h", include_boundaries=True, closed="right" ... ).agg(pl.col("n").mean()).collect() shape: (4, 4) ┌─────────────────────┬─────────────────────┬─────────────────────┬─────┐ │ _lower_boundary ┆ _upper_boundary ┆ time ┆ n │ │ --- ┆ --- ┆ --- ┆ --- │ │ datetime[μs] ┆ datetime[μs] ┆ datetime[μs] ┆ f64 │ ╞═════════════════════╪═════════════════════╪═════════════════════╪═════╡ │ 2021-12-15 23:00:00 ┆ 2021-12-16 00:00:00 ┆ 2021-12-15 23:00:00 ┆ 0.0 │ │ 2021-12-16 00:00:00 ┆ 2021-12-16 01:00:00 ┆ 2021-12-16 00:00:00 ┆ 1.5 │ │ 2021-12-16 01:00:00 ┆ 2021-12-16 02:00:00 ┆ 2021-12-16 01:00:00 ┆ 3.5 │ │ 2021-12-16 02:00:00 ┆ 2021-12-16 03:00:00 ┆ 2021-12-16 02:00:00 ┆ 5.5 │ └─────────────────────┴─────────────────────┴─────────────────────┴─────┘При closed=”left” окно не включает правую границу интервала: [lower_bound, upper_bound)
>>> lf.group_by_dynamic("time", every="1h", closed="left").agg( ... pl.col("n") ... ).collect() shape: (4, 2) ┌─────────────────────┬───────────┐ │ time ┆ n │ │ --- ┆ --- │ │ datetime[μs] ┆ list[i64] │ ╞═════════════════════╪═══════════╡ │ 2021-12-16 00:00:00 ┆ [0, 1] │ │ 2021-12-16 01:00:00 ┆ [2, 3] │ │ 2021-12-16 02:00:00 ┆ [4, 5] │ │ 2021-12-16 03:00:00 ┆ [6] │ └─────────────────────┴───────────┘При closed=”both” значения времени на границах окна относятся к двум группам.
>>> lf.group_by_dynamic("time", every="1h", closed="both").agg( ... pl.col("n") ... ).collect() shape: (4, 2) ┌─────────────────────┬───────────┐ │ time ┆ n │ │ --- ┆ --- │ │ datetime[μs] ┆ list[i64] │ ╞═════════════════════╪═══════════╡ │ 2021-12-16 00:00:00 ┆ [0, 1, 2] │ │ 2021-12-16 01:00:00 ┆ [2, 3, 4] │ │ 2021-12-16 02:00:00 ┆ [4, 5, 6] │ │ 2021-12-16 03:00:00 ┆ [6] │ └─────────────────────┴───────────┘Динамическую группировку можно сочетать с группировкой по обычным ключам.
>>> lf = lf.with_columns(groups=pl.Series(["a", "a", "a", "b", "b", "a", "a"])) >>> lf.collect() shape: (7, 3) ┌─────────────────────┬─────┬────────┐ │ time ┆ n ┆ groups │ │ --- ┆ --- ┆ --- │ │ datetime[μs] ┆ i64 ┆ str │ ╞═════════════════════╪═════╪════════╡ │ 2021-12-16 00:00:00 ┆ 0 ┆ a │ │ 2021-12-16 00:30:00 ┆ 1 ┆ a │ │ 2021-12-16 01:00:00 ┆ 2 ┆ a │ │ 2021-12-16 01:30:00 ┆ 3 ┆ b │ │ 2021-12-16 02:00:00 ┆ 4 ┆ b │ │ 2021-12-16 02:30:00 ┆ 5 ┆ a │ │ 2021-12-16 03:00:00 ┆ 6 ┆ a │ └─────────────────────┴─────┴────────┘ >>> lf.group_by_dynamic( ... "time", ... every="1h", ... closed="both", ... group_by="groups", ... include_boundaries=True, ... ).agg(pl.col("n")).collect() shape: (6, 5) ┌────────┬─────────────────────┬─────────────────────┬─────────────────────┬───────────┐ │ groups ┆ _lower_boundary ┆ _upper_boundary ┆ time ┆ n │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ datetime[μs] ┆ datetime[μs] ┆ datetime[μs] ┆ list[i64] │ ╞════════╪═════════════════════╪═════════════════════╪═════════════════════╪═══════════╡ │ a ┆ 2021-12-16 00:00:00 ┆ 2021-12-16 01:00:00 ┆ 2021-12-16 00:00:00 ┆ [0, 1, 2] │ │ a ┆ 2021-12-16 01:00:00 ┆ 2021-12-16 02:00:00 ┆ 2021-12-16 01:00:00 ┆ [2] │ │ a ┆ 2021-12-16 02:00:00 ┆ 2021-12-16 03:00:00 ┆ 2021-12-16 02:00:00 ┆ [5, 6] │ │ a ┆ 2021-12-16 03:00:00 ┆ 2021-12-16 04:00:00 ┆ 2021-12-16 03:00:00 ┆ [6] │ │ b ┆ 2021-12-16 01:00:00 ┆ 2021-12-16 02:00:00 ┆ 2021-12-16 01:00:00 ┆ [3, 4] │ │ b ┆ 2021-12-16 02:00:00 ┆ 2021-12-16 03:00:00 ┆ 2021-12-16 02:00:00 ┆ [4] │ └────────┴─────────────────────┴─────────────────────┴─────────────────────┴───────────┘Динамическая группировка по столбцу индекса
>>> lf = pl.LazyFrame( ... { ... "idx": pl.int_range(0, 6, eager=True), ... "A": ["A", "A", "B", "B", "B", "C"], ... } ... ) >>> lf.group_by_dynamic( ... "idx", ... every="2i", ... period="3i", ... include_boundaries=True, ... closed="right", ... ).agg(pl.col("A").alias("A_agg_list")).collect() shape: (4, 4) ┌─────────────────┬─────────────────┬─────┬─────────────────┐ │ _lower_boundary ┆ _upper_boundary ┆ idx ┆ A_agg_list │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ list[str] │ ╞═════════════════╪═════════════════╪═════╪═════════════════╡ │ -2 ┆ 1 ┆ -2 ┆ ["A", "A"] │ │ 0 ┆ 3 ┆ 0 ┆ ["A", "B", "B"] │ │ 2 ┆ 5 ┆ 2 ┆ ["B", "B", "C"] │ │ 4 ┆ 7 ┆ 4 ┆ ["C"] │ └─────────────────┴─────────────────┴─────┴─────────────────┘
group_by_dynamic( index_column: IntoExpr, *, every: str | timedelta, period: str | timedelta | None = None, offset: str | timedelta | None = None, include_boundaries: bool = False, closed: ClosedInterval = 'left', label: Label = 'left', group_by: IntoExpr | Iterable[IntoExpr] | None = None, start_by: StartBy = 'window', ) → LazyGroupBy-
Получает первые
nстрок.- Параметры:
-
- n
-
Количество возвращаемых строк.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4, 5, 6], ... "b": [7, 8, 9, 10, 11, 12], ... } ... ) >>> lf.head().collect() shape: (5, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ │ 3 ┆ 9 │ │ 4 ┆ 10 │ │ 5 ┆ 11 │ └─────┴─────┘ >>> lf.head(2).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ └─────┴─────┘
head( n: int = 5, ) → LazyFrame-
Проверяет узел графа вычислений.
Выводит значение, вычисляемое этим узлом графа вычислений, и передаёт его дальше.
Примеры
>>> lf = pl.LazyFrame({"foo": [1, 1, -2, 3]}) >>> ( ... lf.with_columns(pl.col("foo").cum_sum().alias("bar")) ... .inspect() # print the node before the filter ... .filter(pl.col("bar") == pl.col("foo")) ... ) <LazyFrame at ...>
inspect( fmt: str = '{}', ) → LazyFrame-
Интерполирует промежуточные значения линейным методом.
Значения null в начале и конце ряда остаются null.
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, None, 9, 10], ... "bar": [6, 7, 9, None], ... "baz": [1, None, None, 9], ... } ... ) >>> lf.interpolate().collect() shape: (4, 3) ┌──────┬──────┬──────────┐ │ foo ┆ bar ┆ baz │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ f64 │ ╞══════╪══════╪══════════╡ │ 1.0 ┆ 6.0 ┆ 1.0 │ │ 5.0 ┆ 7.0 ┆ 3.666667 │ │ 9.0 ┆ 9.0 ┆ 6.333333 │ │ 10.0 ┆ null ┆ 9.0 │ └──────┴──────┴──────────┘
interpolate() → LazyFrame
-
-
Добавить операцию соединения в логический план.
Изменено в версии 1.24: Параметр
join_nullsпереименован вnulls_equal.- Параметры:
-
- other
-
Lazy DataFrame для соединения.
- on
-
Имя (имена) столбцов соединения в обоих DataFrame. Если задано,
left_onиright_onдолжны быть равны None. Не следует задавать этот параметр, еслиhow='cross'. -
how{‘inner’,’left’, ‘right’, ‘full’, ‘semi’, ‘anti’, ‘cross’} -
Стратегия соединения.
inner
(По умолчанию) Возвращает строки, содержащие совпадающие значения в обеих таблицах.
left
Возвращает все строки из левой таблицы и совпавшие строки из правой таблицы.
right
Возвращает все строки из правой таблицы и совпавшие строки из левой таблицы.
full
Возвращает все строки из обеих таблиц, объединяя совпавшие строки и заполняя несовпадения значениями null.
cross
Возвращает декартово произведение строк обеих таблиц.
semi
Возвращает строки из левой таблицы, имеющие совпадение в правой таблице. Не возвращает столбцы из правой таблицы.
anti
Возвращает строки из левой таблицы, не имеющие совпадений в правой таблице. Не возвращает столбцы из правой таблицы.
- left_on
-
Столбец соединения левого DataFrame.
- right_on
-
Столбец соединения правого DataFrame.
- suffix
-
Суффикс, добавляемый к столбцам с одинаковыми именами.
- validate: {‘m:m’, ‘m:1’, ‘1:m’, ‘1:1’}
-
Проверяет, соответствует ли соединение указанному типу.
m:m
(По умолчанию) Многие ко многим. Проверки не выполняются.
1:1
Один к одному. Проверяет уникальность ключей соединения в обоих наборах данных — левом и правом.
1:m
Один ко многим. Проверяет уникальность ключей соединения в левом наборе данных.
m:1
Многие к одному. Проверяет уникальность ключей соединения в правом наборе данных.
- nulls_equal
-
Соединять по значениям null. По умолчанию значения null никогда не приводят к совпадениям.
- coalesce
-
Поведение coalesce (объединение столбцов соединения).
None
(По умолчанию) Выполнять coalesce, если не указан
how='full'.True
Всегда объединять столбцы соединения.
False
Никогда не объединять столбцы соединения.
Примечание
Соединение по любым выражениям, кроме
col, отключает coalesce. -
maintain_order{‘none’, ‘left’, ‘right’, ‘left_right’, ‘right_left’} -
Порядок строк какого DataFrame следует сохранять, если таковой требуется. Не полагайтесь на наблюдаемый порядок, не задав этот параметр явно: в будущем выпуске ваш код может перестать работать. Отсутствие указания порядка может повысить производительность.
none
(По умолчанию) Определённый порядок не требуется. Порядок может различаться в разных версиях Polars и даже при разных запусках.
left
Сохраняет порядок левого DataFrame.
right
Сохраняет порядок правого DataFrame.
left_right
Сначала сохраняет порядок левого DataFrame, затем правого.
right_left
Сначала сохраняет порядок правого DataFrame, затем левого.
- build_side: {‘auto’, ‘prefer_left’, ‘prefer_right’, ‘force_left’, ‘force_right’}
-
Какая сторона соединения будет использоваться как строящая сторона. Вероятно, эта сторона будет храниться в памяти в виде хеш-таблицы. Обратите внимание: если не выбран вариант
force_, выбранная сторона может различаться в разных версиях Polars и даже при разных запусках.auto
(По умолчанию) Предоставить Polars выбор строящей стороны.
prefer_left
Если нет веских оснований считать, что правая сторона меньше, использовать левую.
prefer_right
Если нет веских оснований считать, что левая сторона меньше, использовать правую.
force_left
Всегда использовать левую сторону.
force_right
Всегда использовать правую сторону.
Предупреждение
Эта функциональность считается экспериментальной. Она может быть удалена или изменена в любой момент без объявления таких изменений несовместимыми.
- allow_parallel
-
Разрешить физическому плану при необходимости параллельно вычислять оба DataFrame вплоть до операции соединения.
- force_parallel
-
Заставить физический план параллельно вычислять оба DataFrame вплоть до операции соединения.
См. также
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": ["a", "b", "c"], ... } ... ) >>> other_lf = pl.LazyFrame( ... { ... "apple": ["x", "y", "z"], ... "ham": ["a", "b", "d"], ... } ... ) >>> lf.join(other_lf, on="ham").collect() shape: (2, 4) ┌─────┬─────┬─────┬───────┐ │ foo ┆ bar ┆ ham ┆ apple │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str ┆ str │ ╞═════╪═════╪═════╪═══════╡ │ 1 ┆ 6.0 ┆ a ┆ x │ │ 2 ┆ 7.0 ┆ b ┆ y │ └─────┴─────┴─────┴───────┘ >>> lf.join(other_lf, on="ham", how="full").collect() shape: (4, 5) ┌──────┬──────┬──────┬───────┬───────────┐ │ foo ┆ bar ┆ ham ┆ apple ┆ ham_right │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str ┆ str ┆ str │ ╞══════╪══════╪══════╪═══════╪═══════════╡ │ 1 ┆ 6.0 ┆ a ┆ x ┆ a │ │ 2 ┆ 7.0 ┆ b ┆ y ┆ b │ │ null ┆ null ┆ null ┆ z ┆ d │ │ 3 ┆ 8.0 ┆ c ┆ null ┆ null │ └──────┴──────┴──────┴───────┴───────────┘ >>> lf.join(other_lf, on="ham", how="left", coalesce=True).collect() shape: (3, 4) ┌─────┬─────┬─────┬───────┐ │ foo ┆ bar ┆ ham ┆ apple │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str ┆ str │ ╞═════╪═════╪═════╪═══════╡ │ 1 ┆ 6.0 ┆ a ┆ x │ │ 2 ┆ 7.0 ┆ b ┆ y │ │ 3 ┆ 8.0 ┆ c ┆ null │ └─────┴─────┴─────┴───────┘ >>> lf.join(other_lf, on="ham", how="semi").collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6.0 ┆ a │ │ 2 ┆ 7.0 ┆ b │ └─────┴─────┴─────┘ >>> lf.join(other_lf, on="ham", how="anti").collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞═════╪═════╪═════╡ │ 3 ┆ 8.0 ┆ c │ └─────┴─────┴─────┘>>> lf.join(other_lf, how="cross").collect() shape: (9, 5) ┌─────┬─────┬─────┬───────┬───────────┐ │ foo ┆ bar ┆ ham ┆ apple ┆ ham_right │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str ┆ str ┆ str │ ╞═════╪═════╪═════╪═══════╪═══════════╡ │ 1 ┆ 6.0 ┆ a ┆ x ┆ a │ │ 1 ┆ 6.0 ┆ a ┆ y ┆ b │ │ 1 ┆ 6.0 ┆ a ┆ z ┆ d │ │ 2 ┆ 7.0 ┆ b ┆ x ┆ a │ │ 2 ┆ 7.0 ┆ b ┆ y ┆ b │ │ 2 ┆ 7.0 ┆ b ┆ z ┆ d │ │ 3 ┆ 8.0 ┆ c ┆ x ┆ a │ │ 3 ┆ 8.0 ┆ c ┆ y ┆ b │ │ 3 ┆ 8.0 ┆ c ┆ z ┆ d │ └─────┴─────┴─────┴───────┴───────────┘
join( other: LazyFrame, on: str | Expr | Sequence[str | Expr] | None = None, how: JoinStrategy = 'inner', *, left_on: str | Expr | Sequence[str | Expr] | None = None, right_on: str | Expr | Sequence[str | Expr] | None = None, suffix: str = '_right', validate: JoinValidation = 'm:m', nulls_equal: bool = False, coalesce: bool | None = None, maintain_order: MaintainOrderJoin | None = None, build_side: JoinBuildSide = 'auto', allow_parallel: bool = True, force_parallel: bool = False, ) → LazyFrame-
Выполнить asof-соединение.
Оно похоже на левое соединение, но вместо равенства ключей выполняется сопоставление по ближайшему ключу.
Оба DataFrame должны быть отсортированы по ключу
on(внутри каждой группыby, если она указана).Для каждой строки левого DataFrame:
- При поиске «назад» выбирается последняя строка правого DataFrame, ключ ‘on’ которой меньше или равен ключу левой строки.
-
При поиске «вперёд» выбирается первая строка правого DataFrame, ключ ‘on’ которой больше или равен ключу левой строки.
При поиске «ближайшего» выбирается строка правого DataFrame со значением, ближайшим к ключу левой строки. Поиск ближайшего совпадения для строковых ключей сейчас не поддерживается.
По умолчанию выполняется поиск «назад».
- Параметры:
-
- other
-
Lazy DataFrame для соединения.
- left_on
-
Столбец соединения левого DataFrame.
- right_on
-
Столбец соединения правого DataFrame.
- on
-
Столбец соединения обоих DataFrame. Если задано,
left_onиright_onдолжны быть равны None. - by_left
-
Сначала выполнить соединение по этим столбцам, а затем asof-соединение.
- by_right
-
Сначала выполнить соединение по этим столбцам, а затем asof-соединение.
- by
-
Сначала выполнить соединение по этим столбцам, а затем asof-соединение.
-
strategy{‘backward’, ‘forward’, ‘nearest’} -
Стратегия соединения.
- suffix
-
Суффикс, добавляемый к столбцам с одинаковыми именами.
- tolerance
-
Числовой допуск. Если задать этот параметр, соединение будет выполнено, только если расстояние между близкими ключами не превышает указанного значения. При выполнении asof-соединения по столбцам типа “Date”, “Datetime”, “Duration” или “Time” используйте объект datetime.timedelta или строку в следующем формате:
- 1ns (1 наносекунда)
- 1us (1 микросекунда)
- 1ms (1 миллисекунда)
- 1s (1 секунда)
- 1m (1 минута)
- 1h (1 час)
- 1d (1 календарный день)
- 1w (1 календарная неделя)
- 1mo (1 календарный месяц)
- 1q (1 календарный квартал)
- 1y (1 календарный год)
Или объедините значения: “3d12h4m25s” # 3 дня, 12 часов, 4 минуты и 25 секунд
Под «календарным днём» понимается то же время следующего дня (который может длиться не 24 часа из-за перехода на летнее время; в неоднозначных случаях мы следуем RFC-5545 и сохраняем fold летнего времени исходной даты и времени). Аналогично для «календарной недели», «календарного месяца», «календарного квартала» и «календарного года».
- allow_parallel
-
Разрешить физическому плану при необходимости параллельно вычислять оба DataFrame вплоть до операции соединения.
- force_parallel
-
Заставить физический план параллельно вычислять оба DataFrame вплоть до операции соединения.
- coalesce
-
Поведение coalesce (объединение столбцов
on/left_on/right_on):- True: -> Всегда объединять столбцы соединения.
- False: -> Никогда не объединять столбцы соединения.
Обратите внимание: соединение по любым выражениям, кроме
col, отключает coalesce. - allow_exact_matches
-
Допускаются ли точные совпадения в качестве предикатов соединения.
-
-
If True, allow matching with the same on value -
(то есть «меньше или равно» / «больше или равно»)
-
-
-
If False, don’t match the same on value -
(то есть строго «меньше» / строго «больше»).
-
-
- check_sortedness
-
Проверять, отсортированы ли ключи asof-соединения. Если ключи не отсортированы, Polars выдаст ошибку. В настоящее время движок
in-memoryне может проверить сортировку, если заданы группы ‘by’. Движокstreamingпроверяет сортировку только обрабатываемых им строк.
См. также
Примечания
Если задан ‘by’, реализация будет одновременно вычислять asof-соединение для всех групп. При большом количестве групп это может привести к высокому потреблению памяти.
Эту проблему можно смягчить, отсортировав оба входных LazyFrame по ключам ‘by’ (с помощью
.sort(); либо используя.set_sorted(), если столбцы уже отсортированы) до вычисления операции соединения и используя потоковый движок для сбора результатов. Например:>>> # Compute streaming asof join with 'by' groups >>> result = ( ... left.sort("by", "on").join_asof( # Sort left manually ... right.set_sorted("by", "on"), # Set right as already sorted ... ) ... ).collect(streaming=True)Примеры
>>> from datetime import date >>> gdp = pl.LazyFrame( ... { ... "date": pl.date_range( ... date(2016, 1, 1), ... date(2020, 1, 1), ... "1y", ... eager=True, ... ), ... "gdp": [4164, 4411, 4566, 4696, 4827], ... } ... ) >>> gdp.collect() shape: (5, 2) ┌────────────┬──────┐ │ date ┆ gdp │ │ --- ┆ --- │ │ date ┆ i64 │ ╞════════════╪══════╡ │ 2016-01-01 ┆ 4164 │ │ 2017-01-01 ┆ 4411 │ │ 2018-01-01 ┆ 4566 │ │ 2019-01-01 ┆ 4696 │ │ 2020-01-01 ┆ 4827 │ └────────────┴──────┘>>> population = pl.LazyFrame( ... { ... "date": [date(2016, 3, 1), date(2018, 8, 1), date(2019, 1, 1)], ... "population": [82.19, 82.66, 83.12], ... } ... ).sort("date") >>> population.collect() shape: (3, 2) ┌────────────┬────────────┐ │ date ┆ population │ │ --- ┆ --- │ │ date ┆ f64 │ ╞════════════╪════════════╡ │ 2016-03-01 ┆ 82.19 │ │ 2018-08-01 ┆ 82.66 │ │ 2019-01-01 ┆ 83.12 │ └────────────┴────────────┘Обратите внимание, что даты не совпадают в точности. Если соединить их с помощью
join_asofиstrategy='backward', то для каждой даты изpopulationбез точного совпадения будет найдена ближайшая более ранняя дата изgdp:>>> population.join_asof(gdp, on="date", strategy="backward").collect() shape: (3, 3) ┌────────────┬────────────┬──────┐ │ date ┆ population ┆ gdp │ │ --- ┆ --- ┆ --- │ │ date ┆ f64 ┆ i64 │ ╞════════════╪════════════╪══════╡ │ 2016-03-01 ┆ 82.19 ┆ 4164 │ │ 2018-08-01 ┆ 82.66 ┆ 4566 │ │ 2019-01-01 ┆ 83.12 ┆ 4696 │ └────────────┴────────────┴──────┘
Обратите внимание:
- дата
2016-03-01изpopulationсопоставляется с2016-01-01изgdp; - дата
2018-08-01изpopulationсопоставляется с2018-01-01изgdp.
Это можно проверить, передав
coalesce=False:>>> population.join_asof( ... gdp, on="date", strategy="backward", coalesce=False ... ).collect() shape: (3, 4) ┌────────────┬────────────┬────────────┬──────┐ │ date ┆ population ┆ date_right ┆ gdp │ │ --- ┆ --- ┆ --- ┆ --- │ │ date ┆ f64 ┆ date ┆ i64 │ ╞════════════╪════════════╪════════════╪══════╡ │ 2016-03-01 ┆ 82.19 ┆ 2016-01-01 ┆ 4164 │ │ 2018-08-01 ┆ 82.66 ┆ 2018-01-01 ┆ 4566 │ │ 2019-01-01 ┆ 83.12 ┆ 2019-01-01 ┆ 4696 │ └────────────┴────────────┴────────────┴──────┘
Если вместо этого использовать
strategy='forward', то для каждой даты изpopulationбез точного совпадения будет найдена ближайшая более поздняя дата изgdp:>>> population.join_asof(gdp, on="date", strategy="forward").collect() shape: (3, 3) ┌────────────┬────────────┬──────┐ │ date ┆ population ┆ gdp │ │ --- ┆ --- ┆ --- │ │ date ┆ f64 ┆ i64 │ ╞════════════╪════════════╪══════╡ │ 2016-03-01 ┆ 82.19 ┆ 4411 │ │ 2018-08-01 ┆ 82.66 ┆ 4696 │ │ 2019-01-01 ┆ 83.12 ┆ 4696 │ └────────────┴────────────┴──────┘
Обратите внимание:
- дата
2016-03-01изpopulationсопоставляется с2017-01-01изgdp; - дата
2018-08-01изpopulationсопоставляется с2019-01-01изgdp.
Наконец,
strategy='nearest'даёт сочетание двух приведённых выше результатов: каждой дате изpopulationбез точного совпадения сопоставляется ближайшая дата изgdp, независимо от того, раньше она или позже:>>> population.join_asof(gdp, on="date", strategy="nearest").collect() shape: (3, 3) ┌────────────┬────────────┬──────┐ │ date ┆ population ┆ gdp │ │ --- ┆ --- ┆ --- │ │ date ┆ f64 ┆ i64 │ ╞════════════╪════════════╪══════╡ │ 2016-03-01 ┆ 82.19 ┆ 4164 │ │ 2018-08-01 ┆ 82.66 ┆ 4696 │ │ 2019-01-01 ┆ 83.12 ┆ 4696 │ └────────────┴────────────┴──────┘
Обратите внимание:
- дата
2016-03-01изpopulationсопоставляется с2016-01-01изgdp; - дата
2018-08-01изpopulationсопоставляется с2019-01-01изgdp.
Аргумент
byпозволяет сначала выполнить соединение по другому столбцу, а затем — asof-соединение. В этом примере сначала выполняется соединение поcountry, а затем asof-соединение по дате, как и выше.>>> gdp_dates = pl.date_range( # fmt: skip ... date(2016, 1, 1), date(2020, 1, 1), "1y", eager=True ... ) >>> gdp2 = pl.LazyFrame( ... { ... "country": ["Germany"] * 5 + ["Netherlands"] * 5, ... "date": pl.concat([gdp_dates, gdp_dates]), ... "gdp": [4164, 4411, 4566, 4696, 4827, 784, 833, 914, 910, 909], ... } ... ).sort("country", "date") >>> >>> gdp2.collect() shape: (10, 3) ┌─────────────┬────────────┬──────┐ │ country ┆ date ┆ gdp │ │ --- ┆ --- ┆ --- │ │ str ┆ date ┆ i64 │ ╞═════════════╪════════════╪══════╡ │ Germany ┆ 2016-01-01 ┆ 4164 │ │ Germany ┆ 2017-01-01 ┆ 4411 │ │ Germany ┆ 2018-01-01 ┆ 4566 │ │ Germany ┆ 2019-01-01 ┆ 4696 │ │ Germany ┆ 2020-01-01 ┆ 4827 │ │ Netherlands ┆ 2016-01-01 ┆ 784 │ │ Netherlands ┆ 2017-01-01 ┆ 833 │ │ Netherlands ┆ 2018-01-01 ┆ 914 │ │ Netherlands ┆ 2019-01-01 ┆ 910 │ │ Netherlands ┆ 2020-01-01 ┆ 909 │ └─────────────┴────────────┴──────┘ >>> pop2 = pl.LazyFrame( ... { ... "country": ["Germany"] * 3 + ["Netherlands"] * 3, ... "date": [ ... date(2016, 3, 1), ... date(2018, 8, 1), ... date(2019, 1, 1), ... date(2016, 3, 1), ... date(2018, 8, 1), ... date(2019, 1, 1), ... ], ... "population": [82.19, 82.66, 83.12, 17.11, 17.32, 17.40], ... } ... ).sort("country", "date") >>> >>> pop2.collect() shape: (6, 3) ┌─────────────┬────────────┬────────────┐ │ country ┆ date ┆ population │ │ --- ┆ --- ┆ --- │ │ str ┆ date ┆ f64 │ ╞═════════════╪════════════╪════════════╡ │ Germany ┆ 2016-03-01 ┆ 82.19 │ │ Germany ┆ 2018-08-01 ┆ 82.66 │ │ Germany ┆ 2019-01-01 ┆ 83.12 │ │ Netherlands ┆ 2016-03-01 ┆ 17.11 │ │ Netherlands ┆ 2018-08-01 ┆ 17.32 │ │ Netherlands ┆ 2019-01-01 ┆ 17.4 │ └─────────────┴────────────┴────────────┘ >>> pop2.join_asof(gdp2, by="country", on="date", strategy="nearest").collect() shape: (6, 4) ┌─────────────┬────────────┬────────────┬──────┐ │ country ┆ date ┆ population ┆ gdp │ │ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ date ┆ f64 ┆ i64 │ ╞═════════════╪════════════╪════════════╪══════╡ │ Germany ┆ 2016-03-01 ┆ 82.19 ┆ 4164 │ │ Germany ┆ 2018-08-01 ┆ 82.66 ┆ 4696 │ │ Germany ┆ 2019-01-01 ┆ 83.12 ┆ 4696 │ │ Netherlands ┆ 2016-03-01 ┆ 17.11 ┆ 784 │ │ Netherlands ┆ 2018-08-01 ┆ 17.32 ┆ 910 │ │ Netherlands ┆ 2019-01-01 ┆ 17.4 ┆ 910 │ └─────────────┴────────────┴────────────┴──────┘
join_asof( other: LazyFrame, *, left_on: str | None | Expr = None, right_on: str | None | Expr = None, on: str | None | Expr = None, by_left: str | Sequence[str] | None = None, by_right: str | Sequence[str] | None = None, by: str | Sequence[str] | None = None, strategy: AsofJoinStrategy = 'backward', suffix: str = '_right', tolerance: str | int | float | timedelta | None = None, allow_parallel: bool = True, force_parallel: bool = False, coalesce: bool = True, allow_exact_matches: bool = True, check_sortedness: bool = True, ) → LazyFrame-
Выполнить соединение на основе одного или нескольких предикатов (не)равенства.
Примечание
Порядок строк входных DataFrame не сохраняется.
Предупреждение
Эта функциональность экспериментальная. Она может быть изменена в любой момент без объявления таких изменений несовместимыми.
- Параметры:
-
- other
-
DataFrame для соединения.
- *predicates
-
Условие (не)равенства для соединения двух таблиц. Если имя столбца встречается в обеих таблицах, в предикате необходимо применить соответствующий суффикс.
-
how{‘inner’, ‘left’, ‘right’} -
Стратегия соединения.
- suffix
-
Суффикс, добавляемый к столбцам с одинаковыми именами.
Примеры
Соединение двух LazyFrame на основе двух предикатов, объединённых оператором AND.
>>> east = pl.LazyFrame( ... { ... "id": [100, 101, 102], ... "dur": [120, 140, 160], ... "rev": [12, 14, 16], ... "cores": [2, 8, 4], ... } ... ) >>> west = pl.LazyFrame( ... { ... "t_id": [404, 498, 676, 742], ... "time": [90, 130, 150, 170], ... "cost": [9, 13, 15, 16], ... "cores": [4, 2, 1, 4], ... } ... ) >>> east.join_where( ... west, ... pl.col("dur") < pl.col("time"), ... pl.col("rev") < pl.col("cost"), ... ).collect() shape: (5, 8) ┌─────┬─────┬─────┬───────┬──────┬──────┬──────┬─────────────┐ │ id ┆ dur ┆ rev ┆ cores ┆ t_id ┆ time ┆ cost ┆ cores_right │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═══════╪══════╪══════╪══════╪═════════════╡ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 498 ┆ 130 ┆ 13 ┆ 2 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ └─────┴─────┴─────┴───────┴──────┴──────┴──────┴─────────────┘Чтобы объединить их оператором OR, используйте одно выражение и оператор
|.>>> east.join_where( ... west, ... (pl.col("dur") < pl.col("time")) | (pl.col("rev") < pl.col("cost")), ... ).collect() shape: (6, 8) ┌─────┬─────┬─────┬───────┬──────┬──────┬──────┬─────────────┐ │ id ┆ dur ┆ rev ┆ cores ┆ t_id ┆ time ┆ cost ┆ cores_right │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═══════╪══════╪══════╪══════╪═════════════╡ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 498 ┆ 130 ┆ 13 ┆ 2 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ │ 102 ┆ 160 ┆ 16 ┆ 4 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ └─────┴─────┴─────┴───────┴──────┴──────┴──────┴─────────────┘Передайте
how="left", чтобы дополнительно сохранить строки левой таблицы, которым ничего не соответствует, заполнив столбцы правой таблицы значениямиnull.>>> east.join_where( ... west, ... pl.col("dur") < pl.col("time"), ... pl.col("rev") < pl.col("cost"), ... how="left", ... ).collect() shape: (6, 8) ┌─────┬─────┬─────┬───────┬──────┬──────┬──────┬─────────────┐ │ id ┆ dur ┆ rev ┆ cores ┆ t_id ┆ time ┆ cost ┆ cores_right │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═══════╪══════╪══════╪══════╪═════════════╡ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 498 ┆ 130 ┆ 13 ┆ 2 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 100 ┆ 120 ┆ 12 ┆ 2 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 676 ┆ 150 ┆ 15 ┆ 1 │ │ 101 ┆ 140 ┆ 14 ┆ 8 ┆ 742 ┆ 170 ┆ 16 ┆ 4 │ │ 102 ┆ 160 ┆ 16 ┆ 4 ┆ null ┆ null ┆ null ┆ null │ └─────┴─────┴─────┴───────┴──────┴──────┴──────┴─────────────┘
join_where( other: LazyFrame, *predicates: Expr | Iterable[Expr], how: JoinWhereStrategy = 'inner', suffix: str = '_right', ) → LazyFrame-
Получить последнюю строку DataFrame.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 5, 3], ... "b": [2, 4, 6], ... } ... ) >>> lf.last().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 3 ┆ 6 │ └─────┴─────┘
last() → LazyFrame
-
Вернуть ленивое представление, то есть сам объект.
Полезно при написании кода, ожидающего объект типа
DataFrameилиLazyFrame. Для LazyFrame этот метод ничего не делает и возвращает тот же объект.- Возвращает:
-
- LazyFrame
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [None, 2, 3, 4], ... "b": [0.5, None, 2.5, 13], ... "c": [True, True, False, None], ... } ... ) >>> lf.lazy() <LazyFrame at ...>
lazy() → LazyFrame
-
Получить первые
nстрок.Псевдоним для
LazyFrame.head().- Параметры:
-
- n
-
Количество возвращаемых строк.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4, 5, 6], ... "b": [7, 8, 9, 10, 11, 12], ... } ... ) >>> lf.limit().collect() shape: (5, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ │ 3 ┆ 9 │ │ 4 ┆ 10 │ │ 5 ┆ 11 │ └─────┴─────┘ >>> lf.limit(2).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ └─────┴─────┘
limit( n: int = 5, ) → LazyFrame-
Применить пользовательскую функцию.
Важно, чтобы функция возвращала DataFrame Polars.
- Параметры:
-
- function
-
Лямбда-функция/функция для применения.
- predicate_pushdown
-
Разрешить оптимизации проталкивания предикатов проходить через этот узел.
- projection_pushdown
-
Разрешить оптимизации проталкивания проекций проходить через этот узел.
- slice_pushdown
-
Разрешить оптимизации проталкивания срезов проходить через этот узел.
- no_optimizations
-
Устарел с версии 1.30.0: Этот параметр устарел и будет удалён в будущем выпуске. Параметры
_pushdownтеперь по умолчанию принимают значениеFalse, поэтому этот параметр больше не нужен. - schema
-
Схема вывода функции. Если задано значение
None, предполагается, что применённая функция не изменит схему. - validate_output_schema
-
Крайне важно, чтобы схема Polars была правильной. Этот флаг гарантирует проверку выходной схемы функции на соответствие ожидаемой схеме. Если задать значение
False, проверка выполняться не будет, что может привести к трудноотлаживаемым ошибкам. - streamable
-
Можно ли выполнять переданную функцию с потоковым движком. Это означает, что функция должна выдавать одинаковый результат при пакетном выполнении и при обработке всего набора данных целиком.
Предупреждение
Значение
schemaдляLazyFrameвсегда должно быть правильным. Вызывающая сторона отвечает за соблюдение этого инварианта.Важно правильно задавать флаги оптимизации. Например, если пользовательская функция выполняет агрегирование столбца, не следует разрешать
predicate_pushdown, поскольку оно удаляет строки и влияет на результаты агрегирования.Примечания
UDF, передаваемая в
map_batches, должна быть чистой, то есть не изменять и не использовать состояние, отличное от её аргументов.Примеры
>>> lf = ( ... pl.LazyFrame( ... { ... "a": pl.int_range(-100_000, 0, eager=True), ... "b": pl.int_range(0, 100_000, eager=True), ... } ... ) ... .map_batches(lambda x: 2 * x, streamable=True) ... .collect(engine="streaming") ... ) shape: (100_000, 2) ┌─────────┬────────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════════╪════════╡ │ -200000 ┆ 0 │ │ -199998 ┆ 2 │ │ -199996 ┆ 4 │ │ -199994 ┆ 6 │ │ … ┆ … │ │ -8 ┆ 199992 │ │ -6 ┆ 199994 │ │ -4 ┆ 199996 │ │ -2 ┆ 199998 │ └─────────┴────────┘
map_batches( function: Callable[[DataFrame], DataFrame], *, predicate_pushdown: bool = False, projection_pushdown: bool = False, slice_pushdown: bool = False, no_optimizations: bool | None = None, schema: None | SchemaDict = None, validate_output_schema: bool = True, streamable: bool = False, ) → LazyFrame-
Сопоставить схему LazyFrame с заданной схемой или привести её к ней.
По умолчанию match_to_schema возвращает ошибку, если входная схема не совпадает в точности с целевой. При этом столбцы можно свободно переставлять, а дополнительные правила приведения типов доступны через необязательные параметры.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без объявления таких изменений несовместимыми.
- Параметры:
-
- schema
-
Целевая схема для сопоставления или приведения.
- missing_columns
-
Выдать ошибку или вставить отсутствующие во входных данных столбцы согласно
schema.Для каждого столбца также можно задать выражение, определяющее, что вставлять, если столбец отсутствует.
- missing_struct_fields
-
Выдать ошибку или вставить отсутствующие во входных данных поля структуры согласно
schema. - extra_columns
-
Выдать ошибку или игнорировать лишние столбцы во входных данных относительно
schema. - extra_struct_fields
-
Выдать ошибку или игнорировать лишние поля структуры во входных данных относительно
schema. - integer_cast
-
Запретить расширяющее приведение типов целочисленных столбцов из входных данных к соответствующему столбцу в
schema. - float_cast
-
Запретить расширяющее приведение типов столбцов с плавающей точкой из входных данных к соответствующему столбцу в
schema.
Примеры
Проверка соответствия схемы
>>> lf = pl.LazyFrame({"a": [1, 2, 3], "b": ["A", "B", "C"]}) >>> lf.match_to_schema({"a": pl.Int64, "b": pl.String}).collect() shape: (3, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════╪═════╡ │ 1 ┆ A │ │ 2 ┆ B │ │ 3 ┆ C │ └─────┴─────┘ >>> (lf.match_to_schema({"a": pl.Int64}).collect()) polars.exceptions.SchemaError: extra columns in `match_to_schema`: "b"Добавление отсутствующих столбцов
>>> ( ... pl.LazyFrame({"a": [1, 2, 3]}) ... .match_to_schema( ... {"a": pl.Int64, "b": pl.String}, ... missing_columns="insert", ... ) ... .collect() ... ) shape: (3, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════╪══════╡ │ 1 ┆ null │ │ 2 ┆ null │ │ 3 ┆ null │ └─────┴──────┘ >>> ( ... pl.LazyFrame({"a": [1, 2, 3]}) ... .match_to_schema( ... {"a": pl.Int64, "b": pl.String}, ... missing_columns={"b": pl.col.a.cast(pl.String)}, ... ) ... .collect() ... ) shape: (3, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════╪═════╡ │ 1 ┆ 1 │ │ 2 ┆ 2 │ │ 3 ┆ 3 │ └─────┴─────┘Удаление лишних столбцов
>>> ( ... pl.LazyFrame({"a": [1, 2, 3], "b": ["A", "B", "C"]}) ... .match_to_schema( ... {"a": pl.Int64}, ... extra_columns="ignore", ... ) ... .collect() ... ) shape: (3, 1) ┌─────┐ │ a │ │ --- │ │ i64 │ ╞═════╡ │ 1 │ │ 2 │ │ 3 │ └─────┘Расширяющее приведение целых чисел и чисел с плавающей точкой
>>> ( ... pl.LazyFrame( ... {"a": [1, 2, 3], "b": [1.0, 2.0, 3.0]}, ... schema={"a": pl.Int32, "b": pl.Float32}, ... ) ... .match_to_schema( ... {"a": pl.Int64, "b": pl.Float64}, ... integer_cast="upcast", ... float_cast="upcast", ... ) ... .collect() ... ) shape: (3, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 1 ┆ 1.0 │ │ 2 ┆ 2.0 │ │ 3 ┆ 3.0 │ └─────┴─────┘
match_to_schema( schema: SchemaDict | Schema, *, missing_columns: Literal['insert', 'raise'] | Mapping[str, Literal['insert', 'raise'] | Expr] | Expr = 'raise', missing_struct_fields: Literal['insert', 'raise'] | Mapping[str, Literal['insert', 'raise']] = 'raise', extra_columns: Literal['ignore', 'raise'] = 'raise', extra_struct_fields: Literal['ignore', 'raise'] | Mapping[str, Literal['ignore', 'raise']] = 'raise', integer_cast: Literal['upcast', 'forbid'] | Mapping[str, Literal['upcast', 'forbid']] = 'forbid', float_cast: Literal['upcast', 'forbid'] | Mapping[str, Literal['upcast', 'forbid']] = 'forbid', ) → LazyFrame-
Агрегировать столбцы LazyFrame, получив их максимальные значения.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.max().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 4 ┆ 2 │ └─────┴─────┘
max() → LazyFrame
-
Агрегировать столбцы LazyFrame, получив их средние значения.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.mean().collect() shape: (1, 2) ┌─────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞═════╪══════╡ │ 2.5 ┆ 1.25 │ └─────┴──────┘
mean() → LazyFrame
-
Агрегировать столбцы LazyFrame, получив их медианные значения.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.median().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞═════╪═════╡ │ 2.5 ┆ 1.0 │ └─────┴─────┘
median() → LazyFrame
-
Преобразовать DataFrame из широкого формата в длинный.
При необходимости оставить столбцы-идентификаторы.
Эта функция полезна для преобразования DataFrame в формат, в котором один или несколько столбцов являются переменными-идентификаторами (id_vars), а все остальные столбцы, считающиеся измеряемыми переменными (value_vars), «разворачиваются» в строки, оставляя только два столбца, не являющихся идентификаторами: ‘variable’ и ‘value’.
Устарел с версии 1.0.0: Вместо него используйте метод
unpivot().- Параметры:
-
- id_vars
-
Столбец (столбцы) или селектор (селекторы), используемые как переменные-идентификаторы.
- value_vars
-
Столбец (столбцы) или селектор (селекторы), используемые как переменные-значения; если
value_varsпуст, будут использоваться все столбцы, не входящие вid_vars. - variable_name
-
Имя столбца
variable. По умолчанию “variable”. - value_name
-
Имя столбца
value. По умолчанию “value”. - streamable
-
Разрешить выполнение этого узла в потоковом движке. При потоковом выполнении порядок результатов операции unpivot не будет стабильным.
melt( id_vars: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, value_vars: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, variable_name: str | None = None, value_name: str | None = None, *, streamable: bool = True, ) → LazyFrame-
Объединить два отсортированных DataFrame по отсортированному ключу.
Результат этой операции также будет отсортирован. Вызывающая сторона отвечает за сортировку фреймов по ключу (ключам) по возрастанию с размещением ключей null в конце; в противном случае порядок результата не будет иметь смысла.
Схемы обоих LazyFrame должны совпадать.
- Параметры:
-
- other
-
Другой DataFrame для объединения.
- key
-
Столбец (столбцы) ключа, по которому отсортированы фреймы. Можно передать имя одного столбца или последовательность имён столбцов. Если указано несколько ключей, фреймы объединяются так, как если бы они были отсортированы по этим ключам в заданном порядке.
- maintain_order
-
Если
True, гарантируется, что при равных ключах в результате строки левого фрейма будут перед строками правого.
Примечания
Если
maintain_order=True, порядок строк результата при совпадении ключей в обоих DataFrame не гарантируется.Ключи должны быть отсортированы по возрастанию.
Примеры
>>> df0 = pl.LazyFrame( ... {"name": ["steve", "elise", "bob"], "age": [42, 44, 18]} ... ).sort("age") >>> df0.collect() shape: (3, 2) ┌───────┬─────┐ │ name ┆ age │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═══════╪═════╡ │ bob ┆ 18 │ │ steve ┆ 42 │ │ elise ┆ 44 │ └───────┴─────┘ >>> df1 = pl.LazyFrame( ... {"name": ["anna", "megan", "steve", "thomas"], "age": [21, 33, 42, 20]} ... ).sort("age") >>> df1.collect() shape: (4, 2) ┌────────┬─────┐ │ name ┆ age │ │ --- ┆ --- │ │ str ┆ i64 │ ╞════════╪═════╡ │ thomas ┆ 20 │ │ anna ┆ 21 │ │ megan ┆ 33 │ │ steve ┆ 42 │ └────────┴─────┘ >>> df0.merge_sorted(df1, key="age").collect() shape: (7, 2) ┌────────┬─────┐ │ name ┆ age │ │ --- ┆ --- │ │ str ┆ i64 │ ╞════════╪═════╡ │ bob ┆ 18 │ │ thomas ┆ 20 │ │ anna ┆ 21 │ │ megan ┆ 33 │ │ steve ┆ 42 │ │ steve ┆ 42 │ │ elise ┆ 44 │ └────────┴─────┘Для объединения фреймов, отсортированных по составному ключу, можно передать несколько ключей. Фреймы объединяются так, как если бы они были отсортированы сначала по
key_1, а затем поkey_2.>>> df0 = pl.LazyFrame({"key_1": [1, 1, 3], "key_2": [1, 4, 2]}) >>> df1 = pl.LazyFrame({"key_1": [1, 2, 3], "key_2": [2, 1, 1]}) >>> df0.merge_sorted(df1, key=["key_1", "key_2"]).collect() shape: (6, 2) ┌───────┬───────┐ │ key_1 ┆ key_2 │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═══════╪═══════╡ │ 1 ┆ 1 │ │ 1 ┆ 2 │ │ 1 ┆ 4 │ │ 2 ┆ 1 │ │ 3 ┆ 1 │ │ 3 ┆ 2 │ └───────┴───────┘
merge_sorted( other: LazyFrame, key: str | Sequence[str], *, maintain_order: bool = False, ) → LazyFrame-
Агрегировать столбцы LazyFrame, получив их минимальные значения.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.min().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 1 │ └─────┴─────┘
min() → LazyFrame
-
Агрегировать столбцы LazyFrame, вычислив сумму количества значений null.
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, None, 3], ... "bar": [6, 7, None], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.null_count().collect() shape: (1, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ u32 ┆ u32 ┆ u32 │ ╞═════╪═════╪═════╡ │ 1 ┆ 1 ┆ 0 │ └─────┴─────┴─────┘
null_count() → LazyFrame
-
-
Предоставляет структурированный способ применения последовательности пользовательских функций (UDF).
- Параметры:
-
- function
-
Вызываемый объект; получит фрейм в качестве первого параметра, за которым последуют переданные args/kwargs.
- *args
-
Аргументы, передаваемые UDF.
- **kwargs
-
Именованные аргументы, передаваемые UDF.
См. также
Примеры
>>> def cast_str_to_int(lf: pl.LazyFrame, col_name: str) -> pl.LazyFrame: ... return lf.with_columns(pl.col(col_name).cast(pl.Int64)) >>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": ["10", "20", "30", "40"], ... } ... ) >>> lf.pipe(cast_str_to_int, col_name="b").collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 10 │ │ 2 ┆ 20 │ │ 3 ┆ 30 │ │ 4 ┆ 40 │ └─────┴─────┘>>> lf = pl.LazyFrame( ... { ... "b": [1, 2], ... "a": [3, 4], ... } ... ) >>> lf.collect() shape: (2, 2) ┌─────┬─────┐ │ b ┆ a │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 3 │ │ 2 ┆ 4 │ └─────┴─────┘ >>> lf.pipe(lambda lf: lf.select(sorted(lf.collect_schema()))).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 3 ┆ 1 │ │ 4 ┆ 2 │ └─────┴─────┘
pipe( function: Callable[Concatenate[LazyFrame, P], T], *args: P.args, **kwargs: P.kwargs, ) → T-
Позволяет изменять ленивый фрейм на этапе построения плана с учётом разрешённой схемы.
В отличие от
pipe, этот метод не выполняетfunctionнемедленно, а делает это только на этапе построения плана. Благодаря этому можно динамически изменять ленивый фрейм, используя разрешённую схему входных данных. Это также означает, что любые исключения, возникающие вfunction, будут выданы только на этапе построения плана.Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без предупреждения о несовместимых изменениях.
- Параметры:
-
- function
-
Вызываемый объект; получит фрейм в качестве первого параметра, а разрешённую схему — в качестве второго параметра.
См. также
Примеры
>>> def cast_to_float_if_necessary( ... lf: pl.LazyFrame, schema: pl.Schema ... ) -> pl.LazyFrame: ... required_casts = [ ... pl.col(name).cast(pl.Float64) ... for name, dtype in schema.items() ... if not dtype.is_float() ... ] ... return lf.with_columns(required_casts) >>> lf = pl.LazyFrame( ... {"a": [1.0, 2.0], "b": ["1.0", "2.5"], "c": [2.0, 3.0]}, ... schema={"a": pl.Float64, "b": pl.String, "c": pl.Float32}, ... ) >>> lf.pipe_with_schema(cast_to_float_if_necessary).collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ f32 │ ╞═════╪═════╪═════╡ │ 1.0 ┆ 1.0 ┆ 2.0 │ │ 2.0 ┆ 2.5 ┆ 3.0 │ └─────┴─────┴─────┘
pipe_with_schema( function: Callable[[LazyFrame, Schema], LazyFrame], ) → LazyFrame-
Создаёт сводную таблицу в стиле электронной таблицы в виде DataFrame.
- Параметры:
-
- on
-
Столбец(ы), значения которых будут использованы в качестве новых столбцов выходного DataFrame.
- on_columns
-
Какие комбинации значений будут учитываться в выходной таблице.
- index
-
Столбец(ы), которые сохраняются при переходе от входных данных к выходным. В выходном DataFrame будет одна строка для каждой уникальной комбинации значений
index. Если задано None, будут использованы все оставшиеся столбцы, не указанные вonиvalues. Необходимо указать хотя бы один из параметровindexиvalues. - values
-
Существующий столбец(ы) со значениями, которые будут помещены в новые столбцы вместо индекса. Если указана агрегация, она будет вычисляться по этим значениям. Если задано None, будут использованы все оставшиеся столбцы, не указанные в
onиindex. Необходимо указать хотя бы один из параметровindexиvalues. - aggregate_function
-
Выберите один из вариантов:
- None: агрегация не выполняется; будет вызвана ошибка, если в группе несколько значений.
- Предопределённая строка агрегатной функции: одна из {‘min’, ‘max’, ‘first’, ‘last’, ‘sum’, ‘mean’, ‘median’, ‘len’, ‘item’}
- Выражение для выполнения агрегации. Выражение может обращаться только к данным соответствующих столбцов ‘values’, созданных сводной таблицей, через
pl.element().
- maintain_order
-
Гарантирует, что значения
indexбудут отсортированы в порядке обнаружения. - separator
-
Используется в качестве разделителя в именах создаваемых столбцов, если имеется несколько столбцов
values. -
column_naming{‘auto’, ‘combine’} -
Определяет способ формирования имён результирующих столбцов.
-
- ‘auto’: значение по умолчанию; при наличии нескольких столбцов используется разделитель
-
values, в противном случае используются только именаon_columns.
-
-
‘combine’: Always combine the values columns’ names with -
имена
on_columns.
-
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без предупреждения о несовместимых изменениях.
-
- Возвращает:
-
- DataFrame
Примечания
В некоторых других фреймворках эта операция может быть известна как
pivot_wider.Примеры
С помощью
pivotможно преобразовать DataFrame из «длинного» формата в «широкий».Например, предположим, что у нас есть DataFrame с результатами тестов учащихся, где каждая строка соответствует отдельному тесту.
>>> df = pl.DataFrame( ... { ... "name": ["Cady", "Cady", "Karen", "Karen"], ... "subject": ["maths", "physics", "maths", "physics"], ... "test_1": [98, 99, 61, 58], ... "test_2": [100, 100, 60, 60], ... } ... ) >>> df shape: (4, 4) ┌───────┬─────────┬────────┬────────┐ │ name ┆ subject ┆ test_1 ┆ test_2 │ │ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i64 ┆ i64 │ ╞═══════╪═════════╪════════╪════════╡ │ Cady ┆ maths ┆ 98 ┆ 100 │ │ Cady ┆ physics ┆ 99 ┆ 100 │ │ Karen ┆ maths ┆ 61 ┆ 60 │ │ Karen ┆ physics ┆ 58 ┆ 60 │ └───────┴─────────┴────────┴────────┘Используя
pivot, можно преобразовать данные так, чтобы на каждого учащегося приходилась одна строка, разные предметы стали столбцами, а результатыtest_1были представлены в виде значений:>>> df.lazy().pivot( ... "subject", ... on_columns=["maths", "physics"], ... index="name", ... values="test_1", ... ).collect() shape: (2, 3) ┌───────┬───────┬─────────┐ │ name ┆ maths ┆ physics │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═══════╪═══════╪═════════╡ │ Cady ┆ 98 ┆ 99 │ │ Karen ┆ 61 ┆ 58 │ └───────┴───────┴─────────┘
Также можно использовать селекторы — здесь в сводную таблицу включены результаты всех тестов:
>>> import polars.selectors as cs >>> df.lazy().pivot( ... "subject", ... on_columns=["maths", "physics"], ... values=cs.starts_with("test"), ... ).collect() shape: (2, 5) ┌───────┬──────────────┬────────────────┬──────────────┬────────────────┐ │ name ┆ test_1_maths ┆ test_1_physics ┆ test_2_maths ┆ test_2_physics │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═══════╪══════════════╪════════════════╪══════════════╪════════════════╡ │ Cady ┆ 98 ┆ 99 ┆ 100 ┆ 100 │ │ Karen ┆ 61 ┆ 58 ┆ 60 ┆ 60 │ └───────┴──────────────┴────────────────┴──────────────┴────────────────┘Если в одной ячейке окажется несколько значений, можно указать способ их агрегации с помощью
aggregate_function:>>> lf = pl.LazyFrame( ... { ... "ix": [1, 1, 2, 2, 1, 2], ... "col": ["a", "a", "a", "a", "b", "b"], ... "foo": [0, 1, 2, 2, 7, 1], ... "bar": [0, 2, 0, 0, 9, 4], ... } ... ) >>> lf.pivot( ... "col", on_columns=["a", "b"], index="ix", aggregate_function="sum" ... ).collect() shape: (2, 5) ┌─────┬───────┬───────┬───────┬───────┐ │ ix ┆ foo_a ┆ foo_b ┆ bar_a ┆ bar_b │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═══════╪═══════╪═══════╪═══════╡ │ 1 ┆ 1 ┆ 7 ┆ 2 ┆ 9 │ │ 2 ┆ 4 ┆ 1 ┆ 0 ┆ 4 │ └─────┴───────┴───────┴───────┴───────┘Также можно передать пользовательскую функцию агрегации, используя
polars.element():>>> lf = pl.LazyFrame( ... { ... "col1": ["a", "a", "a", "b", "b", "b"], ... "col2": ["x", "x", "x", "x", "y", "y"], ... "col3": [6, 7, 3, 2, 5, 7], ... } ... ) >>> lf.pivot( ... "col2", ... on_columns=["x", "y"], ... index="col1", ... values="col3", ... aggregate_function=pl.element().tanh().mean(), ... ).collect() shape: (2, 3) ┌──────┬──────────┬──────────┐ │ col1 ┆ x ┆ y │ │ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 │ ╞══════╪══════════╪══════════╡ │ a ┆ 0.998347 ┆ null │ │ b ┆ 0.964028 ┆ 0.999954 │ └──────┴──────────┴──────────┘
pivot( on: ColumnNameOrSelector | Sequence[ColumnNameOrSelector], on_columns: Sequence[Any] | Series | DataFrame, *, index: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, values: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, aggregate_function: PivotAgg | Expr | None = None, maintain_order: bool = False, separator: str = '_', column_naming: Literal['auto', 'combine'] = 'auto', ) → LazyFrame-
Профилирует LazyFrame.
Устарело с версии 1.43.0: Этот метод предназначался для старого движка, работающего в памяти, но начиная с версии 2.0 Polars по умолчанию использует потоковый движок. Из-за параллельной работы потокового движка сведения о профилировании, полученные этой функцией, могут вводить в заблуждение.
Выполняет запрос и возвращает кортеж, содержащий материализованный DataFrame и DataFrame со сведениями о профилировании каждого выполненного узла.
Единица измерения времени — микросекунда.
- Параметры:
-
- type_coercion
-
Выполнять оптимизацию приведения типов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - predicate_pushdown
-
Выполнять оптимизацию проталкивания предикатов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - projection_pushdown
-
Выполнять оптимизацию проталкивания проекций.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - simplify_expression
-
Выполнять оптимизацию упрощения выражений.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - no_optimization
-
Отключить некоторые оптимизации.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - slice_pushdown
-
Оптимизация проталкивания срезов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subplan_elim
-
Попытаться кэшировать разветвляющиеся под планы, возникающие при соединении таблицы с самой собой или при объединении.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subexpr_elim
-
Общие подвыражения будут кэшироваться и использоваться повторно.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - cluster_with_columns
-
Объединять последовательные независимые вызовы with_columns
Устарело с версии 1.30.0: Используйте параметры
optimizations. - collapse_joins
-
Объединять соединение и фильтры в более быстрое соединение
Устарело с версии 1.30.0: Используйте параметры
optimizations. - show_plot
-
Показывать диаграмму Ганта с результатами профилирования
- truncate_nodes
-
Обрезать подписи на диаграмме Ганта до указанного числа символов.
- figsize
-
Размер графика профилирования в формате matplotlib figsize
- engine
-
Выбрать движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие названия движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если она не задана, использовать"in-memory"(это значение по умолчанию может измениться в будущем выпуске). -
"in-memory": использовать движок, работающий в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и часто превосходя по производительности движок, работающий в памяти. В ближайшее время он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуются графический процессор Nvidia иcudf-polars). Для детальной настройки (например, выбора устройства в системах с несколькими GPU) передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на движок, работающий в памяти.
Примечание
Режим GPU считается нестабильным. Не все запросы будут успешно выполняться на GPU, однако, если выполнение не поддерживается, они должны прозрачно переключаться на движок по умолчанию.
Запуск с
POLARS_VERBOSE=1позволяет узнать, что запрос переключился на другой движок и по какой причине. -
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без предупреждения о несовместимых изменениях.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a", maintain_order=True).agg(pl.all().sum()).sort( ... "a" ... ).profile() (shape: (3, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ a ┆ 4 ┆ 10 │ │ b ┆ 11 ┆ 10 │ │ c ┆ 6 ┆ 1 │ └─────┴─────┴─────┘, shape: (3, 3) ┌─────────────────────────┬───────┬──────┐ │ node ┆ start ┆ end │ │ --- ┆ --- ┆ --- │ │ str ┆ u64 ┆ u64 │ ╞═════════════════════════╪═══════╪══════╡ │ optimization ┆ 0 ┆ 5 │ │ group_by_partitioned(a) ┆ 5 ┆ 470 │ │ sort(a) ┆ 475 ┆ 1964 │ └─────────────────────────┴───────┴──────┘)
profile( *, type_coercion: bool = True, predicate_pushdown: bool = True, projection_pushdown: bool = True, simplify_expression: bool = True, no_optimization: bool = False, slice_pushdown: bool = True, comm_subplan_elim: bool = True, comm_subexpr_elim: bool = True, cluster_with_columns: bool = True, collapse_joins: bool = True, show_plot: bool = False, truncate_nodes: int = 0, figsize: tuple[int, int] = (18, 8, ), engine: EngineType = 'auto', optimizations: QueryOptFlags = (), **_kwargs: Any, ) → tuple[DataFrame, DataFrame]-
Вычисляет агрегатное значение квантиля для столбцов LazyFrame.
- Параметры:
-
- quantile
-
Квантиль от 0.0 до 1.0.
-
interpolation{‘nearest’, ‘higher’, ‘lower’, ‘midpoint’, ‘linear’, ‘equiprobable’} -
Метод интерполяции.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.quantile(0.7).collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞═════╪═════╡ │ 3.0 ┆ 1.0 │ └─────┴─────┘
quantile( quantile: float | Expr, interpolation: QuantileMethod = 'nearest', ) → LazyFrame-
Выполняет запрос удалённо в Polars Cloud.
Это позволяет запускать Polars удалённо на одном или нескольких рабочих узлах, используя различные стратегии распределённых вычислений.
Подробнее — в публикации с анонсом
- Параметры:
-
- context
-
Контекст вычислений, в котором выполняются запросы. Если не указан, используется контекст по умолчанию.
- plan_type: {‘plain’, ‘dot’}
-
Определяет, нужно ли выводить диаграмму в формате dot или текстовое представление логического плана.
- n_retries:
-
Количество повторных попыток выполнения этапа в случае сбоя.
- engine: {‘auto’, ‘streaming’, ‘in-memory’}
-
Подсказка Polars о предпочтительном движке. Это предпочтение необязательно должно соблюдаться.
- scaling_mode: {‘auto’, ‘single-node’, ‘distributed’}
-
Если задано значение auto, запрос, для которого режим масштабирования явно не указан через
remote().distributed()илиremote().single_node(), будет выполняться в распределённом режиме, если в кластере больше одного узла.
Примеры
Выполнение запроса в облачном экземпляре.
>>> lf = pl.LazyFrame([1, 2, 3]).sum() >>> in_progress = lf.remote().execute(blocking=False) >>> # do some other work >>> in_progress.await_result() shape: (1, 1) ┌──────────┐ │ column_0 │ │ --- │ │ i64 │ ╞══════════╡ │ 6 │ └──────────┘
Явное выполнение запроса в распределённом режиме.
>>> lf = ( ... pl.scan_parquet("s3://my_bucket/").group_by("key").agg(pl.sum("values")) ... ) >>> result = lf.remote().distributed().execute() shape: (1, 1) ┌──────────┐ │ column_0 │ │ --- │ │ i64 │ ╞══════════╡ │ 6 │ └──────────┘
remote( context: pc.ClientContext | None = None, *, plan_type: pc._typing.PlanTypePreference = 'dot', n_retries: int = 0, engine: pc._typing.Engine = 'auto', scaling_mode: pc._typing.ScalingMode = 'auto', ) → pc.LazyFrameRemote-
Удаляет строки, соответствующие заданным выражениям-предикатам.
Исходный порядок оставшихся строк сохраняется.
Сохраняются строки, для которых предикат фильтрации не принимает значение True (в том числе строки, для которых предикат принимает значение
null).- Параметры:
-
- predicates
-
Выражение(я), результатом которых является булева Series. Если передано несколько предикатов, они объединяются с помощью
&(логическое И), поэтому строка удаляется, только если каждый предикат для неё принимает значение True. - constraints
-
Фильтры столбцов; используйте
name = value, чтобы фильтровать столбцы по переданному значению. Каждое ограничение действует так же, какpl.col(name).eq(value), и неявно объединяется с другими условиями фильтрации с помощью&.
См. также
Примечания
Если вы переходите с Pandas и выполняете фильтрацию на основе сравнения двух или более столбцов, обратите внимание, что в Polars любое сравнение с участием значений
nullвозвращает результатnull, а не логическое значение True или False. Поэтому такие строки не удаляются. Чтобы избежать неожиданного поведения, правильно обрабатывайте нулевые значения (см. примеры ниже).Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [2, 3, None, 4, 0], ... "bar": [5, 6, None, None, 0], ... "ham": ["a", "b", None, "c", "d"], ... } ... )Удаление строк, соответствующих условию:
>>> lf.remove( ... pl.col("bar") >= 5, ... ).collect() shape: (3, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ │ 4 ┆ null ┆ c │ │ 0 ┆ 0 ┆ d │ └──────┴──────┴──────┘Удаление строк по нескольким условиям, объединённым операторами И/ИЛИ:
>>> lf.remove( ... (pl.col("foo") >= 0) & (pl.col("bar") >= 0), ... ).collect() shape: (2, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ │ 4 ┆ null ┆ c │ └──────┴──────┴──────┘>>> lf.remove( ... (pl.col("foo") >= 0) | (pl.col("bar") >= 0), ... ).collect() shape: (1, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ └──────┴──────┴──────┘Передача нескольких ограничений с помощью синтаксиса
*args:>>> lf.remove( ... pl.col("ham").is_not_null(), ... pl.col("bar") >= 0, ... ).collect() shape: (2, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ │ 4 ┆ null ┆ c │ └──────┴──────┴──────┘Передача ограничений с помощью синтаксиса
**kwargs:>>> lf.remove(foo=0, bar=0).collect() shape: (4, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ 2 ┆ 5 ┆ a │ │ 3 ┆ 6 ┆ b │ │ null ┆ null ┆ null │ │ 4 ┆ null ┆ c │ └──────┴──────┴──────┘
Удаление строк путём сравнения двух столбцов друг с другом; в данном случае удаляются строки, в которых значения этих столбцов не равны (используется
ne_missing, чтобы считать нулевые значения равными при сравнении):>>> lf.remove( ... pl.col("foo").ne_missing(pl.col("bar")), ... ).collect() shape: (2, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞══════╪══════╪══════╡ │ null ┆ null ┆ null │ │ 0 ┆ 0 ┆ d │ └──────┴──────┴──────┘
remove( *predicates: IntoExprColumn | Iterable[IntoExprColumn] | bool | list[bool] | np.ndarray[Any, Any], **constraints: Any, ) → LazyFrame-
Переименовывает столбцы.
- Параметры:
-
- mapping
-
Пары «ключ-значение», задающие соответствие старых имён новым, или функция, которая принимает старое имя и возвращает новое.
- strict
-
Проверять, что все имена столбцов существуют в текущей схеме, и вызывать исключение, если какие-либо из них отсутствуют. (Обратите внимание: этот параметр ничего не делает, если в
mappingпередана функция.)
См. также
Примечания
Если существующие имена меняются местами (например, ‘A’ указывает на ‘B’, а ‘B’ — на ‘A’), Polars отключает проталкивание проекций и предикатов на этом узле.
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6, 7, 8], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.rename({"foo": "apple"}).collect() shape: (3, 3) ┌───────┬─────┬─────┐ │ apple ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═══════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ └───────┴─────┴─────┘ >>> lf.rename(lambda column_name: "c" + column_name[1:]).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ coo ┆ car ┆ cam │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ └─────┴─────┴─────┘
rename( mapping: Mapping[str, str] | Callable[[str], str], *, strict: bool = True, ) → LazyFrame-
Обращает порядок строк в DataFrame.
Примеры
>>> lf = pl.LazyFrame( ... { ... "key": ["a", "b", "c"], ... "val": [1, 2, 3], ... } ... ) >>> lf.reverse().collect() shape: (3, 2) ┌─────┬─────┐ │ key ┆ val │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ c ┆ 3 │ │ b ┆ 2 │ │ a ┆ 1 │ └─────┴─────┘
reverse() → LazyFrame
-
Создаёт скользящие группы на основе временного или целочисленного столбца.
В отличие от
group_by_dynamic, границы окон определяются отдельными значениями и не имеют постоянного интервала. Для постоянных интервалов используйтеLazyFrame.group_by_dynamic().Если задан временной ряд
<t_0, t_1, ..., t_n>, по умолчанию создаются следующие окна:- (t_0 - период, t_0]
- (t_1 - период, t_1]
- …
- (t_n - период, t_n]
если же передано значение
offset, отличное от значения по умолчанию, окна будут иметь следующий вид:- (t_0 + смещение, t_0 + смещение + период]
- (t_1 + смещение, t_1 + смещение + период]
- …
- (t_n + смещение, t_n + смещение + период]
Аргументы
periodиoffsetзадаются либо объектом timedelta, либо строкой, составленной по следующему синтаксису:- 1ns (1 наносекунда)
- 1us (1 микросекунда)
- 1ms (1 миллисекунда)
- 1s (1 секунда)
- 1m (1 минута)
- 1h (1 час)
- 1d (1 календарный день)
- 1w (1 календарная неделя)
- 1mo (1 календарный месяц)
- 1q (1 календарный квартал)
- 1y (1 календарный год)
- 1i (1 индекс)
Или комбинируйте их: “3d12h4m25s” # 3 дня, 12 часов, 4 минуты и 25 секунд
Под «календарным днём» подразумевается соответствующее время следующего дня (который может длиться не 24 часа из-за перехода на летнее время). То же относится к «календарной неделе», «календарному месяцу», «календарному кварталу» и «календарному году».
Изменено в версии 0.20.14: Параметр
byпереименован вgroup_by.- Параметры:
-
- index_column
-
Столбец, используемый для группировки по временному окну. Обычно имеет тип Date/Datetime. Этот столбец должен быть отсортирован по возрастанию (или, если указан
group_by, должен быть отсортирован по возрастанию внутри каждой группы).При группировке по скользящему окну на индексах тип данных должен быть одним из следующих: {UInt32, UInt64, Int32, Int64}. Обратите внимание, что первые три типа временно приводятся к Int64, поэтому для повышения производительности используйте столбец Int64.
- period
-
Длина окна — должна быть неотрицательной.
- offset
-
Смещение окна. По умолчанию —
-period. -
closed{‘right’, ‘left’, ‘both’, ‘none’} -
Определяет, какие границы временного интервала включаются в него.
- group_by
-
Дополнительно группировать по этому столбцу/этим столбцам
- Возвращает:
-
- LazyGroupBy
-
Объект, для которого можно вызвать
.agg, чтобы выполнить агрегацию по группам. Результат будет отсортирован поindex_column(но обратите внимание: если переданы столбцыgroup_by, сортировка будет выполняться только внутри каждой группы).
См. также
Примеры
>>> dates = [ ... "2020-01-01 13:45:48", ... "2020-01-01 16:42:13", ... "2020-01-01 16:45:09", ... "2020-01-02 18:12:48", ... "2020-01-03 19:45:32", ... "2020-01-08 23:16:43", ... ] >>> df = pl.LazyFrame({"dt": dates, "a": [3, 7, 5, 9, 2, 1]}).with_columns( ... pl.col("dt").str.strptime(pl.Datetime).set_sorted() ... ) >>> out = ( ... df.rolling(index_column="dt", period="2d") ... .agg( ... pl.sum("a").alias("sum_a"), ... pl.min("a").alias("min_a"), ... pl.max("a").alias("max_a"), ... ) ... .collect() ... ) >>> out shape: (6, 4) ┌─────────────────────┬───────┬───────┬───────┐ │ dt ┆ sum_a ┆ min_a ┆ max_a │ │ --- ┆ --- ┆ --- ┆ --- │ │ datetime[μs] ┆ i64 ┆ i64 ┆ i64 │ ╞═════════════════════╪═══════╪═══════╪═══════╡ │ 2020-01-01 13:45:48 ┆ 3 ┆ 3 ┆ 3 │ │ 2020-01-01 16:42:13 ┆ 10 ┆ 3 ┆ 7 │ │ 2020-01-01 16:45:09 ┆ 15 ┆ 3 ┆ 7 │ │ 2020-01-02 18:12:48 ┆ 24 ┆ 3 ┆ 9 │ │ 2020-01-03 19:45:32 ┆ 11 ┆ 2 ┆ 9 │ │ 2020-01-08 23:16:43 ┆ 1 ┆ 1 ┆ 1 │ └─────────────────────┴───────┴───────┴───────┘
rolling( index_column: IntoExpr, *, period: str | timedelta, offset: str | timedelta | None = None, closed: ClosedInterval = 'right', group_by: IntoExpr | Iterable[IntoExpr] | None = None, ) → LazyGroupBy-
Возвращает упорядоченное соответствие имён столбцов их типам данных.
Предупреждение
Определение схемы LazyFrame может быть затратной операцией. Для определения схемы рекомендуется использовать
collect_schema(). Это свойство существует только для симметрии с классом DataFrame.См. также
-
collect_schema -
Schema
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6.0, 7.0, 8.0], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.schema Schema({'foo': Int64, 'bar': Float64, 'ham': String}) -
property schema: Schema
-
Выбирает столбцы из этого LazyFrame.
- Параметры:
-
- *exprs
-
Выбираемый столбец(ы), задаваемый позиционными аргументами. Принимает выражения. Строки интерпретируются как имена столбцов, а другие аргументы, не являющиеся выражениями, — как литералы.
- **named_exprs
-
Дополнительные выбираемые столбцы, задаваемые именованными аргументами. Столбцы будут переименованы в соответствии с переданными именами аргументов.
Примеры
Передайте имя столбца, чтобы выбрать его.
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [6, 7, 8], ... "ham": ["a", "b", "c"], ... } ... ) >>> lf.select("foo").collect() shape: (3, 1) ┌─────┐ │ foo │ │ --- │ │ i64 │ ╞═════╡ │ 1 │ │ 2 │ │ 3 │ └─────┘Несколько столбцов можно выбрать, передав список их имён.
>>> lf.select(["foo", "bar"]).collect() shape: (3, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 6 │ │ 2 ┆ 7 │ │ 3 ┆ 8 │ └─────┴─────┘
Несколько столбцов также можно выбрать с помощью позиционных аргументов вместо списка. Также поддерживаются выражения.
>>> lf.select(pl.col("foo"), pl.col("bar") + 1).collect() shape: (3, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ │ 3 ┆ 9 │ └─────┴─────┘Используйте именованные аргументы, чтобы легко задавать имена входным выражениям.
>>> lf.select( ... threshold=pl.when(pl.col("foo") > 2).then(10).otherwise(0) ... ).collect() shape: (3, 1) ┌───────────┐ │ threshold │ │ --- │ │ i32 │ ╞═══════════╡ │ 0 │ │ 0 │ │ 10 │ └───────────┘
select( *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr, ) → LazyFrame-
Выбирает столбцы из этого LazyFrame.
Все выражения выполняются последовательно, а не параллельно. Используйте этот метод, если вычисления для каждого выражения не требуют больших затрат.
- Параметры:
-
- *exprs
-
Выбираемый столбец(ы), задаваемый позиционными аргументами. Принимает выражения. Строки интерпретируются как имена столбцов, а другие аргументы, не являющиеся выражениями, — как литералы.
- **named_exprs
-
Дополнительные выбираемые столбцы, задаваемые именованными аргументами. Столбцы будут переименованы в соответствии с переданными именами аргументов.
См. также
select_seq( *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr, ) → LazyFrame-
Сериализует логический план этого LazyFrame в файл или строку в формате JSON.
- Параметры:
-
- file
-
Путь к файлу, в который следует записать результат. Если задано
None(значение по умолчанию), результат возвращается в виде строки. - format
-
Формат сериализации. Возможные варианты:
-
"binary": сериализация в двоичный формат (bytes). Значение по умолчанию. -
"json": сериализация в формат JSON (string) (устарело).
-
См. также
Примечания
Сериализация не является стабильной между версиями Polars: LazyFrame, сериализованный в одной версии Polars, может не десериализоваться в другой.
Примеры
Сериализация логического плана в двоичное представление.
>>> lf = pl.LazyFrame({"a": [1, 2, 3]}).sum() >>> bytes = lf.serialize()Позднее байты можно десериализовать обратно в LazyFrame.
>>> import io >>> pl.LazyFrame.deserialize(io.BytesIO(bytes)).collect() shape: (1, 1) ┌─────┐ │ a │ │ --- │ │ i64 │ ╞═════╡ │ 6 │ └─────┘
serialize( file: IOBase | str | Path | None = None, *, format: SerializationFormat = 'binary', ) → bytes | str | None-
Помечает столбец как отсортированный.
Это может ускорить последующие операции.
- Параметры:
-
- column
-
Отсортированный столбец (столбцы)
- more_columns
-
Столбцы, отсортированные после
column. - descending
-
Определяет, отсортирован ли столбец по убыванию.
- nulls_last
-
Определяет, находятся ли нулевые значения в конце.
Предупреждение
Если данные НЕ отсортированы, это может привести к неверным результатам! Используйте с осторожностью!
set_sorted( column: str | list[str], *more_columns: str, descending: bool | list[bool] = False, nulls_last: bool | list[bool] = False, ) → LazyFrame-
-
Сдвигает значения на заданное количество индексов.
- Параметры:
-
- n
-
Количество индексов для сдвига вперёд. Если передано отрицательное значение, значения сдвигаются в противоположном направлении.
- fill_value
-
Заполнить результирующие значения null этим значением. Принимает скалярное выражение. Входные данные, не являющиеся выражениями, разбираются как литералы.
Примечания
Этот метод аналогичен операции
LAGв SQL, когда значениеnположительно. При отрицательном значенииnон аналогиченLEAD.Примеры
По умолчанию значения сдвигаются вперёд на один индекс.
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [5, 6, 7, 8], ... } ... ) >>> lf.shift().collect() shape: (4, 2) ┌──────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞══════╪══════╡ │ null ┆ null │ │ 1 ┆ 5 │ │ 2 ┆ 6 │ │ 3 ┆ 7 │ └──────┴──────┘Передайте отрицательное значение, чтобы сдвинуть их в противоположном направлении.
>>> lf.shift(-2).collect() shape: (4, 2) ┌──────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞══════╪══════╡ │ 3 ┆ 7 │ │ 4 ┆ 8 │ │ null ┆ null │ │ null ┆ null │ └──────┴──────┘
Укажите
fill_value, чтобы заполнить результирующие значения null.>>> lf.shift(-2, fill_value=100).collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 3 ┆ 7 │ │ 4 ┆ 8 │ │ 100 ┆ 100 │ │ 100 ┆ 100 │ └─────┴─────┘
shift( n: int | IntoExprColumn = 1, *, fill_value: IntoExpr | None = None, ) → LazyFrame-
Показывает первые
nстрок.- Параметры:
-
-
limitint -
Количество строк для отображения. Если передано None, возникает ValueError. Это сделано для соответствия сигнатуре
DataFrame.show(). -
ascii_tablesbool -
Использовать символы ASCII для отображения границ таблицы. Установите False, чтобы вернуться к стилю форматирования UTF8_FULL_CONDENSED по умолчанию. Дополнительные сведения см. в разделе
Config.set_ascii_tables(). -
decimal_separatorstr -
Задаёт символ десятичного разделителя. Дополнительные сведения см. в разделе
Config.set_decimal_separator(). -
thousands_separatorstr, bool -
Задаёт символ разделителя групп разрядов. Дополнительные сведения см. в разделе
Config.set_thousands_separator(). -
float_precisionint -
Количество десятичных знаков для отображения значений с плавающей точкой. Дополнительные сведения см. в разделе
Config.set_float_precision(). -
fmt_float{“mixed”, “full”} -
Управляет отображением значений с плавающей точкой. Дополнительные сведения см. в разделе
Config.set_fmt_float(). Поддерживаются следующие варианты:- «mixed»: ограничивает количество десятичных знаков и использует научную нотацию для больших и малых значений.
- «full»: выводит значение с плавающей точкой с полной точностью.
-
fmt_str_lengthsint -
Количество символов для отображения строковых значений. Дополнительные сведения см. в разделе
Config.set_fmt_str_lengths(). -
fmt_table_cell_list_lenint -
Количество элементов для отображения значений типа List. Дополнительные сведения см. в разделе
Config.set_fmt_table_cell_list_len(). -
tbl_cell_alignmentstr -
Задаёт выравнивание ячеек таблицы. Дополнительные сведения см. в разделе
Config.set_tbl_cell_alignment(). Поддерживаются следующие варианты:- «LEFT»: выравнивание по левому краю
- «CENTER»: выравнивание по центру
- «RIGHT»: выравнивание по правому краю
-
tbl_cell_numeric_alignmentstr -
Задаёт выравнивание ячеек таблицы для числовых столбцов. Дополнительные сведения см. в разделе
Config.set_tbl_cell_numeric_alignment(). Поддерживаются следующие варианты:- «LEFT»: выравнивание по левому краю
- «CENTER»: выравнивание по центру
- «RIGHT»: выравнивание по правому краю
-
tbl_colsint -
Количество столбцов для отображения. Дополнительные сведения см. в разделе
Config.set_tbl_cols(). -
tbl_column_data_type_inlinebool -
Размещает тип данных в одной строке с именем столбца (справа, в скобках). Дополнительные сведения см. в разделе
Config.set_tbl_column_data_type_inline(). -
tbl_dataframe_shape_belowbool -
Выводит информацию о форме DataFrame под данными при отображении таблиц. Дополнительные сведения см. в разделе
Config.set_tbl_dataframe_shape_below(). -
tbl_formattingstr -
Задаёт стиль форматирования таблицы. Дополнительные сведения см. в разделе
Config.set_tbl_formatting(). Поддерживаются следующие варианты:- «ASCII_FULL»: ASCII, все границы и линии, включая разделители строк.
- «ASCII_FULL_CONDENSED»: как ASCII_FULL, но с уменьшенными интервалами между строками.
- «ASCII_NO_BORDERS»: ASCII, без границ.
- «ASCII_BORDERS_ONLY»: ASCII, только границы.
- «ASCII_BORDERS_ONLY_CONDENSED»: ASCII, только границы, уменьшенные интервалы между строками.
- «ASCII_HORIZONTAL_ONLY»: ASCII, только горизонтальные линии.
- «ASCII_MARKDOWN»: формат Markdown (для усечённых значений используются многоточия ASCII).
- «MARKDOWN»: формат Markdown (для усечённых значений используются многоточия UTF-8).
- «UTF8_FULL»: UTF-8, все границы и линии, включая разделители строк.
- «UTF8_FULL_CONDENSED»: как UTF8_FULL, но с уменьшенными интервалами между строками.
- «UTF8_NO_BORDERS»: UTF-8, без границ.
- «UTF8_BORDERS_ONLY»: UTF-8, только границы.
- «UTF8_HORIZONTAL_ONLY»: UTF-8, только горизонтальные линии.
- «NOTHING»: без границ и других линий.
-
tbl_hide_column_data_typesbool -
Скрывает типы данных столбцов таблицы (i64, f64, str и т. д.). Дополнительные сведения см. в разделе
Config.set_tbl_hide_column_data_types(). -
tbl_hide_column_namesbool -
Скрывает имена столбцов таблицы. Дополнительные сведения см. в разделе
Config.set_tbl_hide_column_names(). -
tbl_hide_dtype_separatorbool -
Скрывает разделитель «—» между именами столбцов и их типами. Дополнительные сведения см. в разделе
Config.set_tbl_hide_dtype_separator(). -
tbl_hide_dataframe_shapebool -
Скрывает информацию о форме DataFrame при отображении таблиц. Дополнительные сведения см. в разделе
Config.set_tbl_hide_dataframe_shape(). -
tbl_width_charsint -
Задаёт максимальную ширину таблицы в символах. Дополнительные сведения см. в разделе
Config.set_tbl_width_chars(). -
trim_decimal_zerosbool -
Удаляет завершающие нули из значений типа Decimal. Дополнительные сведения см. в разделе
Config.set_trim_decimal_zeros().
-
Предупреждение
- Этот метод не сохраняет ленивый режим фрейма и
collectитоговый результат. Эта операция может оказаться ресурсоёмкой.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4, 5, 6], ... "b": [7, 8, 9, 10, 11, 12], ... } ... ) >>> lf.show() shape: (5, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ │ 3 ┆ 9 │ │ 4 ┆ 10 │ │ 5 ┆ 11 │ └─────┴─────┘ >>> lf.show(2) shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 7 │ │ 2 ┆ 8 │ └─────┴─────┘
show( limit: int | None = 5, *, ascii_tables: bool | None = None, decimal_separator: str | None = None, thousands_separator: str | bool | None = None, float_precision: int | None = None, fmt_float: FloatFmt | None = None, fmt_str_lengths: int | None = None, fmt_table_cell_list_len: int | None = None, tbl_cell_alignment: Alignment | None = None, tbl_cell_numeric_alignment: Alignment | None = None, tbl_cols: int | None = None, tbl_column_data_type_inline: bool | None = None, tbl_dataframe_shape_below: bool | None = None, tbl_formatting: TableFormatNames | None = None, tbl_hide_column_data_types: bool | None = None, tbl_hide_column_names: bool | None = None, tbl_hide_dtype_separator: bool | None = None, tbl_hide_dataframe_shape: bool | None = None, tbl_width_chars: int | None = None, trim_decimal_zeros: bool | None = True, ) → None-
Показывает график плана запроса.
Обратите внимание, что для визуализации необходимо установить Graphviz (если он ещё не установлен, его можно скачать здесь: https://graphviz.org/download).
- Параметры:
-
- optimized
-
Оптимизировать план запроса.
- show
-
Показать рисунок.
- output_path
-
Сохранить рисунок на диск.
- raw_output
-
Вернуть синтаксис dot. Нельзя использовать вместе с
showи/илиoutput_path. - figsize
-
Передаётся в matplotlib, если
show == True. - type_coercion
-
Выполнить оптимизацию приведения типов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - predicate_pushdown
-
Выполнить оптимизацию проталкивания предикатов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - projection_pushdown
-
Выполнить оптимизацию проталкивания проекций.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - simplify_expression
-
Выполнить оптимизацию упрощения выражений.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - slice_pushdown
-
Оптимизация проталкивания срезов.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subplan_elim
-
Попытается кэшировать ветвящиеся подзапросы, возникающие при самосоединениях или объединениях.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - comm_subexpr_elim
-
Общие подвыражения будут кэшироваться и использоваться повторно.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - cluster_with_columns
-
Объединяет последовательные независимые вызовы with_columns.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - collapse_joins
-
Объединяет соединение и фильтры в более быстрое соединение.
Устарело с версии 1.30.0: Используйте параметры
optimizations. - engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"in-memory"(это значение по умолчанию может измениться в будущих выпусках). -
"in-memory": использовать движок в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по скорости движок в памяти. В ближайшее время он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется графический процессор Nvidia иcudf-polars). Для более точной настройки (например, выбора устройства в системах с несколькими GPU) передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на движок в памяти.
Примечание
Режим GPU считается нестабильным. Не все запросы будут успешно выполняться на GPU, однако при отсутствии поддержки выполнения они должны автоматически переключаться на движок по умолчанию.
Запуск с
POLARS_VERBOSE=1позволяет узнать, когда запрос переключается на другой движок и почему. -
-
plan_stage{‘ir’, ‘physical’} -
Выберите отображаемый этап. Сейчас отдельный физический этап есть только у потокового движка; у остальных движков IR и физический этап совпадают.
- optimizations
-
Набор оптимизаций, учитываемых при оптимизации запроса.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [1, 2, 3, 4, 5, 6], ... "c": [6, 5, 4, 3, 2, 1], ... } ... ) >>> lf.group_by("a", maintain_order=True).agg(pl.all().sum()).sort( ... "a" ... ).show_graph(plan_stage="ir")
show_graph( *, optimized: bool = True, show: bool = True, output_path: str | Path | None = None, raw_output: bool = False, figsize: tuple[float, float] = (16.0, 12.0, ), type_coercion: bool = True, _type_check: bool = True, predicate_pushdown: bool = True, projection_pushdown: bool = True, simplify_expression: bool = True, slice_pushdown: bool = True, comm_subplan_elim: bool = True, comm_subexpr_elim: bool = True, cluster_with_columns: bool = True, collapse_joins: bool = True, engine: EngineType = 'auto', plan_stage: PlanStage | None = None, _check_order: bool = True, optimizations: QueryOptFlags = (), ) → str | None-
Выполняет запрос и вызывает пользовательскую функцию для каждого готового пакета.
В некоторых случаях это позволяет передавать потоком результаты, размер которых превышает объём оперативной памяти.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
Предупреждение
Этот метод значительно медленнее встроенных методов записи. Используйте его, только если не можете реализовать логику другим способом.
- Параметры:
-
- function
-
Функция, вызываемая для готового пакета. Если функция возвращает
True, это означает, что дальнейшие результаты не нужны, и позволяет досрочно завершить обработку. - chunk_size
-
Количество строк, помещаемых в буфер до вызова обратного вызова.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, выполнение будет немного быстрее. - lazy: bool
-
Ожидать вызова
collectперед началом выполнения. - engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": использовать перед записью движок в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по скорости движок в памяти. В ближайшее время он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется графический процессор Nvidia иcudf-polars). Для более точной настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Не влияет на результат, если для
lazyзадано значениеTrue.
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> lf.sink_batches(lambda df: print(df))
sink_batches( function: Callable[[DataFrame], bool | None], *, chunk_size: int | None = None, maintain_order: bool = True, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → LazyFrame | None-
Выполняет запрос в потоковом режиме и записывает результат в файл CSV.
Это позволяет записывать на диск потоковые результаты, размер которых превышает объём оперативной памяти.
- Параметры:
-
- path
-
Путь к файлу, в который следует записать данные.
- include_bom
-
Добавлять ли BOM UTF-8 в выходной файл CSV.
- compression
-
Формат сжатия.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- compression_level
-
Уровень сжатия, обычно от 0 до 9, либо
None, чтобы позволить движку выбрать уровень самостоятельно.Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- check_extension
-
Проверять ли соответствие имени файла настройкам сжатия. Возникает ошибка, если для сжатия задано значение «uncompressed», а имя файла оканчивается на одно из значений («.gz», «.zst», «.zstd»), либо если compression != ‘uncompressed’, но расширение файла не соответствует настройке. Применяется только к файлам, заданным путём.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- include_header
-
Добавлять ли заголовок в выходной файл CSV.
- separator
-
Разделять поля CSV этим символом.
- line_terminator
-
Строка, используемая для завершения каждой строки.
- quote_char
-
Байт, используемый в качестве символа кавычек.
- batch_size
-
Количество строк, обрабатываемых одним потоком.
- datetime_format
-
Строка формата со спецификаторами, определёнными в Rust-крейте chrono. Если формат не задан, точность дробной части секунды по умолчанию определяется по максимальной единице времени среди столбцов Datetime фрейма (если они есть).
- date_format
-
Строка формата со спецификаторами, определёнными в Rust-крейте chrono.
- time_format
-
Строка формата со спецификаторами, определёнными в Rust-крейте chrono.
- float_scientific
-
Всегда использовать научную нотацию (true), никогда её не использовать (false) или выбирать автоматически (None) для типов данных с плавающей точкой.
- float_precision
-
Количество записываемых десятичных знаков; применяется к обоим типам данных с плавающей точкой.
- decimal_comma
-
Использовать запятую вместо точки в качестве десятичного разделителя. При необходимости значения с плавающей точкой будут заключены в кавычки; чтобы изменить это поведение, задайте разделитель полей.
- null_value
-
Строка, представляющая значения null (по умолчанию — пустая строка).
-
quote_style{‘necessary’, ‘always’, ‘non_numeric’, ‘never’} -
Определяет используемую стратегию расстановки кавычек.
- necessary (по умолчанию): кавычки ставятся вокруг полей только при необходимости. Они необходимы, если поле содержит кавычку, разделитель или символ завершения записи. Кавычки также необходимы при записи пустой записи (которую невозможно отличить от записи с одним пустым полем). Это вариант по умолчанию.
- always: кавычки ставятся вокруг каждого поля. Всегда.
- never: кавычки не ставятся вокруг полей никогда, даже если это приводит к некорректным данным CSV (например, если строки с разделителем остаются без кавычек).
- non_numeric: кавычки ставятся вокруг всех нечисловых полей. То есть при записи поля, которое не разбирается как корректное число с плавающей точкой или целое число, кавычки используются, даже если они не являются строго необходимыми.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, выполнение будет немного быстрее.Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- storage_options
-
Параметры подключения к облачному провайдеру.
На данный момент поддерживаются следующие облачные провайдеры: AWS, GCP и Azure. Список поддерживаемых ключей:
- aws
- gcp
- azure
- Hugging Face (
hf://): принимает ключ API в параметреtoken:{'token': '...'}или через переменную средыHF_TOKEN.
Если
storage_optionsне указан, Polars попытается определить нужные сведения по переменным среды. - credential_provider
-
Функция для предоставления учётных данных облачного хранилища. Функция должна возвращать словарь с ключами учётных данных и необязательным временем истечения срока их действия.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- retries
-
Количество повторных попыток при сбое доступа к облачному экземпляру.
Устарело с версии 1.37.1: Вместо этого передайте {“max_retries”: n} через
storage_options. - sync_on_close: { None, ‘data’, ‘all’ }
-
Синхронизировать ли данные с диском перед закрытием файла.
-
None— не выполнять синхронизацию. -
data— синхронизировать содержимое файла. -
all— синхронизировать содержимое файла и метаданные.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
-
- mkdir: bool
-
Рекурсивно создать все каталоги в указанном пути.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- lazy: bool
-
Ожидать вызова
collectперед началом выполнения.Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": использовать перед записью движок в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по скорости движок в памяти. В ближайшее время он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется графический процессор Nvidia иcudf-polars). Для более точной настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключается на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Не влияет на результат, если для
lazyзадано значениеTrue.Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и такие изменения не будут считаться нарушающими совместимость.
- Возвращает:
-
- DataFrame
См. также
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> lf.sink_csv("out.csv")Запись в объект
BytesIO.>>> import io >>> buf = io.BytesIO() >>> pl.LazyFrame({"x": [1, 2, 1]}).sink_csv(buf)Разбиение на разделы в стиле секционирования Hive:
>>> pl.LazyFrame({"x": [1, 2, 1], "y": [3, 4, 5]}).sink_csv( ... pl.PartitionBy("./out/", key="x"), ... mkdir=True ... )
sink_csv( path: str | Path | IO[bytes] | IO[str] | PartitionBy, *, include_bom: bool = False, compression: Literal['uncompressed', 'gzip', 'zstd'] = 'uncompressed', compression_level: int | None = None, check_extension: bool = True, include_header: bool = True, separator: str = ',', line_terminator: str = '\n', quote_char: str = '"', batch_size: int = 1024, datetime_format: str | None = None, date_format: str | None = None, time_format: str | None = None, float_scientific: bool | None = None, float_precision: int | None = None, decimal_comma: bool = False, null_value: str | None = None, quote_style: CsvQuoteStyle | None = None, maintain_order: bool = True, storage_options: StorageOptionsDict | None = None, credential_provider: CredentialProviderFunction | Literal['auto'] | None = 'auto', retries: int | None = None, sync_on_close: SyncOnCloseMethod | None = None, mkdir: bool = False, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → LazyFrame | None-
-
Записать DataFrame как таблицу Delta.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Параметры:
-
- target
-
URI таблицы или объект DeltaTable.
-
mode{‘error’, ‘append’, ‘overwrite’, ‘ignore’, ‘merge’} -
Способ обработки существующих данных.
- Если задано ‘error’, вызвать ошибку, если таблица уже существует (по умолчанию).
- Если задано ‘append’, добавить новые данные.
- Если задано ‘overwrite’, заменить таблицу новыми данными.
- Если задано ‘ignore’, ничего не записывать, если таблица уже существует.
- Если задано ‘merge’, вернуть объект
TableMergerдля объединения данных DataFrame с существующими данными.
- storage_options
-
Дополнительные параметры для систем хранения, поддерживаемых
deltalake. Для облачных хранилищ они могут включать настройки аутентификации и т. д. - credential_provider
-
Функция, которую можно вызвать для получения учетных данных облачного хранилища. Ожидается, что функция вернёт словарь с ключами учетных данных и необязательным сроком действия учетных данных.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- delta_write_options
-
Дополнительные именованные аргументы при записи таблицы Delta Lake. Список поддерживаемых параметров записи см. здесь.
- delta_merge_options
-
Именованные аргументы, необходимые для
MERGEтаблицы Delta Lake. Список поддерживаемых параметров объединения см. здесь. - engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": перед записью использовать движок с обработкой в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по производительности движок с обработкой в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется GPU Nvidia иcudf-polars). Для тонкой настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключится на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Исключения:
-
- TypeError
-
Если DataFrame содержит неподдерживаемые типы данных.
- ArrowInvalidError
-
Если DataFrame содержит типы данных, которые нельзя привести к примитивному типу.
- TableNotFoundError
-
Если таблица Delta не существует и выполняется действие MERGE.
Примечания
Типы данных Polars
NullиTimeне поддерживаются спецификацией протокола Delta и приведут к возникновению TypeError. При записи столбцы с типом данныхCategoricalпреобразуются в обычные строки (не категориальные).Столбцы Polars всегда допускают значения NULL. Чтобы записать данные в таблицу Delta со столбцами, не допускающими значения NULL, необходимо передать пользовательскую схему pyarrow в
delta_write_options. См. последний пример ниже.Примеры
Записать в таблицу Delta Lake большой набор данных, который не помещается в память.
>>> lf = pl.scan_parquet( ... "/path/to/my_larger_than_ram_file.parquet" ... ) >>> table_path = "/path/to/delta-table/" >>> lf.sink_delta(table_path)
Записать DataFrame в локальную файловую систему в виде таблицы Delta Lake.
>>> df = pl.DataFrame( ... { ... "foo": [1, 2, 3, 4, 5], ... "bar": [6, 7, 8, 9, 10], ... "ham": ["a", "b", "c", "d", "e"], ... } ... ) >>> table_path = "/path/to/delta-table/" >>> df.lazy().sink_delta(table_path)Добавить данные в существующую таблицу Delta Lake в локальной файловой системе. Обратите внимание: операция завершится ошибкой, если схема новых данных не совпадает со схемой существующей таблицы.
>>> df.lazy().sink_delta(table_path, mode="append")
Перезаписать таблицу Delta Lake, создав новую версию. Если схемы новых и старых данных совпадают, указывать
schema_modeне требуется.>>> existing_table_path = "/path/to/delta-table/" >>> df.lazy().sink_delta( ... existing_table_path, ... mode="overwrite", ... delta_write_options={"schema_mode": "overwrite"}, ... )Записать DataFrame в облачное объектное хранилище, например S3, в виде таблицы Delta Lake.
>>> table_path = "s3://bucket/prefix/to/delta-table/" >>> df.lazy().sink_delta( ... table_path, ... storage_options={ ... "AWS_REGION": "THE_AWS_REGION", ... "AWS_ACCESS_KEY_ID": "THE_AWS_ACCESS_KEY_ID", ... "AWS_SECRET_ACCESS_KEY": "THE_AWS_SECRET_ACCESS_KEY", ... }, ... )Записать DataFrame в виде таблицы Delta Lake со столбцами, не допускающими значения NULL.
>>> import pyarrow as pa >>> existing_table_path = "/path/to/delta-table/" >>> df.lazy().sink_delta( ... existing_table_path, ... delta_write_options={ ... "schema": pa.schema([pa.field("foo", pa.int64(), nullable=False)]) ... }, ... )Записать DataFrame в виде таблицы Delta Lake со сжатием zstd. Сведения обо всех именованных аргументах
delta_write_optionsсм. в документации deltalake здесь, а в частности о свойствах Writer — здесь.>>> import deltalake >>> df.lazy().sink_delta( ... table_path, ... delta_write_options={ ... "writer_properties": deltalake.WriterProperties(compression="zstd"), ... }, ... )Объединить DataFrame с существующей таблицей Delta Lake. Сведения обо всех методах
TableMergerсм. в документации deltalake здесь.>>> df = pl.DataFrame( ... { ... "foo": [1, 2, 3, 4, 5], ... "bar": [6, 7, 8, 9, 10], ... "ham": ["a", "b", "c", "d", "e"], ... } ... ) >>> table_path = "/path/to/delta-table/" >>> ( ... df.lazy() ... .sink_delta( ... "table_path", ... mode="merge", ... delta_merge_options={ ... "predicate": "s.foo = t.foo", ... "source_alias": "s", ... "target_alias": "t", ... }, ... ) ... .when_matched_update_all() ... .when_not_matched_insert_all() ... .execute() ... )
sink_delta( target: str | Path | deltalake.DeltaTable, *, mode: Literal['error', 'append', 'overwrite', 'ignore', 'merge'] = 'error', storage_options: StorageOptionsDict | None = None, credential_provider: CredentialProviderFunction | Literal['auto'] | None = 'auto', delta_write_options: dict[str, Any] | None = None, delta_merge_options: dict[str, Any] | None = None, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → deltalake.table.TableMerger | None-
Записать LazyFrame в таблицу Iceberg.
Предупреждение
В настоящее время эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Параметры:
-
- target
-
Объект таблицы PyIceberg или строковый идентификатор «namespace.table_name».
-
mode{‘append’, ‘overwrite’} -
Способ обработки существующих данных.
- Если задано ‘append’, добавить новые данные.
- Если задано ‘overwrite’, заменить таблицу новыми данными.
-
schema_mode{‘merge’, ‘overwrite’} -
Способ обработки различий между входящей схемой и схемой таблицы.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Если задано ‘merge’, расширить схему таблицы входящими полями и совместимыми преобразованиями типов.
- Если задано ‘overwrite’, заменить схему таблицы входящей схемой. Для этого требуется
mode='overwrite'. - Если задано None, потребовать совпадения схем.
- snapshot_properties
-
Пользовательские свойства для добавления к сводке снимка Iceberg.
- catalog
-
Каталог PyIceberg, из которого следует загрузить таблицу, если в
targetбыл передан идентификатор таблицы. - storage_options
-
Дополнительные параметры для систем хранения, поддерживаемых
pyiceberg. Для облачных хранилищ они могут включать настройки аутентификации и т. д.Дополнительная информация доступна здесь.
- engine
-
Движок, используемый для создания строк локальным средством записи
pyiceberg.
- Возвращает:
-
- DataFrame
-
Содержит путь к новым метаданным.
sink_iceberg( target: str | pyiceberg.table.Table, *, mode: Literal['append', 'overwrite'], schema_mode: Literal['merge', 'overwrite'] | None = None, snapshot_properties: dict[str, str] | None = None, catalog: pyiceberg.catalog.Catalog | polars.io.iceberg.IcebergCatalogConfig | None = None, storage_options: StorageOptionsDict | None = None, engine: EngineType = 'auto', ) → DataFrame-
Вычислить запрос в потоковом режиме и записать результат в файл IPC.
Это позволяет записывать на диск потоковые результаты, размер которых превышает объём оперативной памяти.
- Параметры:
-
- path
-
Путь к файлу, в который следует записать данные.
-
compression{‘uncompressed’, ‘lz4’, ‘zstd’} -
Выберите «zstd» для эффективного сжатия. Выберите «lz4» для быстрого сжатия и распаковки.
- compat_level
-
Уровень совместимости, используемый при экспорте структур данных Polars. Уровень совместимости по умолчанию подходит большинству пользователей. Для максимальной совместимости используйте
pl.CompatLevel.oldest().pl.CompatLevel.newest()использует наивысший поддерживаемый уровень совместимости, но считается нестабильным и может измениться без необходимости считать это несовместимым изменением. - record_batch_size
-
Размер пакетов записей в количестве строк.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, выполнение будет немного быстрее.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- storage_options
-
Параметры, указывающие способ подключения к облачному провайдеру.
В настоящее время поддерживаются облачные провайдеры AWS, GCP и Azure. Поддерживаемые ключи см. здесь:
- aws
- gcp
- azure
- Hugging Face (
hf://): принимает ключ API в параметреtoken:{'token': '...'}или через переменную средыHF_TOKEN.
Если
storage_optionsне задан, Polars попытается определить необходимые сведения по переменным среды. - credential_provider
-
Функция, которую можно вызвать для получения учетных данных облачного хранилища. Ожидается, что функция вернёт словарь с ключами учетных данных и необязательным сроком действия учетных данных.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- retries
-
Количество повторных попыток при сбое доступа к облачному экземпляру.
Устарело с версии 1.37.1: Вместо этого передайте {“max_retries”: n} через
storage_options. - sync_on_close: { None, ‘data’, ‘all’ }
-
Синхронизировать данные с диском перед закрытием файла.
-
Noneне выполняет синхронизацию. -
dataсинхронизирует содержимое файла. -
allсинхронизирует содержимое файла и метаданные.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
-
- mkdir: bool
-
Рекурсивно создать все каталоги в указанном пути.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- lazy: bool
-
Не начинать выполнение, пока не будет вызван
collect.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": перед записью использовать движок с обработкой в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по производительности движок с обработкой в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": в настоящее время не поддерживается для этого средства записи.
Если выбранный движок не может выполнить запрос, Polars переключится на потоковый движок.
Примечание
В настоящее время движок GPU не поддерживается.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Это не влияет на результат, если для
lazyзадано значениеTrue.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- sinked_paths_callback
-
Вызываемый объект, которому передаются сведения о путях записи.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Возвращает:
-
- DataFrame
См. также
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> lf.sink_ipc("out.arrow")Запись в объект
BytesIO.>>> import io >>> buf = io.BytesIO() >>> pl.LazyFrame({"x": [1, 2, 1]}).sink_ipc(buf)Разбить на разделы в стиле секционирования Hive:
>>> pl.LazyFrame({"x": [1, 2, 1], "y": [3, 4, 5]}).sink_ipc( ... pl.PartitionBy("./out/", key="x"), ... mkdir=True ... )
sink_ipc( path: str | Path | IO[bytes] | PartitionBy, *, compression: IpcCompression | None = 'uncompressed', compat_level: CompatLevel | None = None, record_batch_size: int | None = None, maintain_order: bool = True, storage_options: StorageOptionsDict | None = None, credential_provider: CredentialProviderFunction | Literal['auto'] | None = 'auto', retries: int | None = None, sync_on_close: SyncOnCloseMethod | None = None, mkdir: bool = False, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), _record_batch_statistics: bool = False, sinked_paths_callback: SinkedPathsCallback | None = None, ) → LazyFrame | None-
Вычислить запрос в потоковом режиме и записать результат в файл NDJSON.
Это позволяет записывать на диск потоковые результаты, размер которых превышает объём оперативной памяти.
- Параметры:
-
- path
-
Путь к файлу, в который следует записать данные.
- compression
-
Формат сжатия.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- compression_level
-
Используемый уровень сжатия, обычно от 0 до 9, или
None, чтобы позволить движку выбрать значение.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- check_extension
-
Проверять, соответствует ли имя файла настройкам сжатия. Будет вызвана ошибка, если для сжатия задано ‘uncompressed’, а имя файла заканчивается на одно из значений (“.gz”, “.zst”, “.zstd”), либо если для сжатия задано значение, отличное от ‘uncompressed’, а расширение файла не соответствует ему. Применяется только в том случае, если указан путь к файлу.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, выполнение будет немного быстрее.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- storage_options
-
Параметры, указывающие способ подключения к облачному провайдеру.
В настоящее время поддерживаются облачные провайдеры AWS, GCP и Azure. Поддерживаемые ключи см. здесь:
- aws
- gcp
- azure
- Hugging Face (
hf://): принимает ключ API в параметреtoken:{'token': '...'}или через переменную средыHF_TOKEN.
Если
storage_optionsне задан, Polars попытается определить необходимые сведения по переменным среды. - credential_provider
-
Функция, которую можно вызвать для получения учетных данных облачного хранилища. Ожидается, что функция вернёт словарь с ключами учетных данных и необязательным сроком действия учетных данных.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- retries
-
Количество повторных попыток при сбое доступа к облачному экземпляру.
Устарело с версии 1.37.1: Вместо этого передайте {“max_retries”: n} через
storage_options. - sync_on_close: { None, ‘data’, ‘all’ }
-
Синхронизировать данные с диском перед закрытием файла.
-
Noneне выполняет синхронизацию. -
dataсинхронизирует содержимое файла. -
allсинхронизирует содержимое файла и метаданные.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
-
- mkdir: bool
-
Рекурсивно создать все каталоги в указанном пути.
Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- lazy: bool
-
Не начинать выполнение, пока не будет вызван
collect.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- engine
-
Выберите движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие имена движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной средыPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": перед записью использовать движок с обработкой в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по производительности движок с обработкой в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок CUDA GPU (требуется GPU Nvidia иcudf-polars). Для тонкой настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключится на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Это не влияет на результат, если для
lazyзадано значениеTrue.Предупреждение
Эта функциональность считается нестабильной. Она может измениться в любой момент без необходимости считать это несовместимым изменением.
- Возвращает:
-
- DataFrame
См. также
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> lf.sink_ndjson("out.ndjson")Запись в объект
BytesIO.>>> import io >>> buf = io.BytesIO() >>> pl.LazyFrame({"x": [1, 2, 1]}).sink_ndjson(buf)Разбить на разделы в стиле секционирования Hive:
>>> pl.LazyFrame({"x": [1, 2, 1], "y": [3, 4, 5]}).sink_ndjson( ... pl.PartitionBy("./out/", key="x"), ... mkdir=True ... )
sink_ndjson( path: str | Path | IO[bytes] | IO[str] | PartitionBy, *, compression: Literal['uncompressed', 'gzip', 'zstd'] = 'uncompressed', compression_level: int | None = None, check_extension: bool = True, maintain_order: bool = True, storage_options: StorageOptionsDict | None = None, credential_provider: CredentialProviderFunction | Literal['auto'] | None = 'auto', retries: int | None = None, sync_on_close: SyncOnCloseMethod | None = None, mkdir: bool = False, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), ) → LazyFrame | None-
-
Вычислить запрос в потоковом режиме и записать результат в файл Parquet.
Это позволяет записывать на диск потоковые результаты, размер которых превышает объём оперативной памяти.
- Параметры:
-
- path
-
Путь к файлу, в который следует записать данные.
-
compression{‘lz4’, ‘uncompressed’, ‘snappy’, ‘gzip’, ‘brotli’, ‘zstd’} -
Выберите «zstd» для хорошего сжатия. Выберите «lz4» для быстрого сжатия и распаковки. Выберите «snappy», если вам нужны более надёжные гарантии обратной совместимости при работе со старыми средствами чтения Parquet.
- compression_level
-
Уровень сжатия. Чем выше уровень сжатия, тем меньше размер файлов на диске.
- «gzip»: минимальный уровень: 0, максимальный уровень: 9, по умолчанию: 6.
- «brotli»: минимальный уровень: 0, максимальный уровень: 11, по умолчанию: 1.
- «zstd»: минимальный уровень: 1, максимальный уровень: 22, по умолчанию: 3.
- statistics
-
Записывать статистику в заголовки Parquet. Это поведение используется по умолчанию.
Возможные значения:
-
True: включить набор статистических данных по умолчанию (значение по умолчанию). Некоторые статистические данные могут быть отключены. -
False: отключить все статистические данные - «full»: вычислить и записать все доступные статистические данные.
-
{ "statistic-key": True / False, ... }. Доступные ключи:- «min»: минимальное значение столбца (по умолчанию:
True) - «max»: максимальное значение столбца (по умолчанию:
True) - «distinct_count»: количество уникальных значений в столбце (по умолчанию:
False) - «null_count»: количество значений null в столбце (по умолчанию:
True)
- «min»: минимальное значение столбца (по умолчанию:
-
- row_group_size
-
Размер групп строк в количестве строк. Если указано None (значение по умолчанию), используются чанки
DataFrame. Запись меньшими чанками может снизить нагрузку на память и повысить скорость записи. - data_page_size
-
Ограничение размера отдельных страниц данных. Если значение не указано, по умолчанию используется 1024 * 1024 байт.
- maintain_order
-
Сохранять порядок обработки данных. Если задать
False, работа будет немного быстрее.Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- storage_options
-
Параметры, определяющие способ подключения к облачному провайдеру.
В настоящее время поддерживаются облачные провайдеры AWS, GCP и Azure. Список поддерживаемых ключей:
- aws
- gcp
- azure
- Hugging Face (
hf://): принимает ключ API в параметреtoken:{'token': '...'}или из переменной окруженияHF_TOKEN.
Если
storage_optionsне задан, Polars попытается получить необходимые сведения из переменных окружения. - credential_provider
-
Функция, предоставляющая учётные данные для облачного хранилища. Ожидается, что функция вернёт словарь с ключами учётных данных и необязательным временем истечения срока их действия.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- retries
-
Количество повторных попыток при сбое доступа к облачному экземпляру.
Устарело с версии 1.37.1: Вместо этого передайте {“max_retries”: n} через
storage_options. - sync_on_close: { None, ‘data’, ‘all’ }
-
Синхронизировать данные с диском перед закрытием файла.
-
Noneне выполняет синхронизацию. -
dataсинхронизирует содержимое файла. -
allсинхронизирует содержимое файла и метаданные.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
-
- metadata
-
Словарь или функция обратного вызова для добавления пар «ключ — значение» в метаданные файла Parquet.
Предупреждение
Эта функция считается экспериментальной. Она может быть удалена или изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- arrow_schema
-
Пользовательская схема Arrow для записи в файл. Это позволяет задать пользовательскую схему и метаданные на уровне полей. Имена и типы данных должны совпадать.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- mkdir: bool
-
Рекурсивно создать все каталоги в указанном пути.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- lazy: bool
-
Отложить выполнение до вызова
collect.Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- engine
-
Выбрать движок для обработки запроса (по умолчанию
"auto"). Также можно передать экземплярEngine. Поддерживаются следующие названия движков:-
"auto": использовать движок, заданный с помощьюConfig.set_engine_affinityили переменной окруженияPOLARS_ENGINE_AFFINITY; если она не задана, использовать"streaming". -
"in-memory": перед записью использовать движок для обработки в памяти; это движок по умолчанию. -
"streaming": использовать потоковый движок, который обрабатывает запросы пакетами, снижая нагрузку на память и зачастую превосходя по производительности движок для обработки в памяти. Вскоре он станет движком Polars по умолчанию. -
"gpu": использовать движок GPU CUDA (требуется GPU Nvidia иcudf-polars). Для детальной настройки передайте объектGPUEngine.
Если выбранный движок не может выполнить запрос, Polars переключится на потоковый движок.
-
- optimizations
-
Этапы оптимизации, выполняемые при оптимизации запроса.
Не влияет на результат, если для
lazyзаданоTrue.Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- sinked_paths_callback
-
Функция обратного вызова, которой передаются сведения о путях, в которые записаны данные.
Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- Возвращает:
-
- DataFrame
См. также
Примеры
>>> lf = pl.scan_csv("/path/to/my_larger_than_ram_file.csv") >>> lf.sink_parquet("out.parquet")Записать данные в объект
BytesIO.>>> import io >>> buf = io.BytesIO() >>> pl.LazyFrame({"x": [1, 2, 1]}).sink_parquet(buf)Разбить данные на разделы в стиле секционирования Hive:
>>> pl.LazyFrame({"x": [1, 2, 1], "y": [3, 4, 5]}).sink_parquet( ... pl.PartitionBy("./out/", key="x"), ... mkdir=True ... )
sink_parquet( path: str | Path | IO[bytes] | PartitionBy, *, compression: ParquetCompression = 'zstd', compression_level: int | None = None, statistics: bool | str | dict[str, bool] = True, row_group_size: int | None = None, data_page_size: int | None = None, maintain_order: bool = True, storage_options: StorageOptionsDict | None = None, credential_provider: CredentialProviderFunction | Literal['auto'] | None = 'auto', retries: int | None = None, sync_on_close: SyncOnCloseMethod | None = None, metadata: ParquetMetadata | None = None, arrow_schema: ArrowSchemaExportable | None = None, mkdir: bool = False, lazy: bool = False, engine: EngineType = 'auto', optimizations: QueryOptFlags = (, ), sinked_paths_callback: SinkedPathsCallback | None = None, ) → LazyFrame | None-
Получить срез этого DataFrame.
- Параметры:
-
- offset
-
Начальный индекс. Поддерживается отрицательная индексация.
- length
-
Длина среза. Если задано
None, будут выбраны все строки начиная с указанного смещения.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["x", "y", "z"], ... "b": [1, 3, 5], ... "c": [2, 4, 6], ... } ... ) >>> lf.slice(1, 2).collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ y ┆ 3 ┆ 4 │ │ z ┆ 5 ┆ 6 │ └─────┴─────┴─────┘
slice( offset: int, length: int | None = None, ) → LazyFrame-
Отсортировать LazyFrame по указанным столбцам.
- Параметры:
-
- by
-
Столбец или столбцы для сортировки. Принимает выражения, в том числе селекторы. Строки интерпретируются как имена столбцов.
- *more_by
-
Дополнительные столбцы для сортировки, заданные как позиционные аргументы.
- descending
-
Сортировать по убыванию. При сортировке по нескольким столбцам можно указать последовательность логических значений, задающую порядок сортировки для каждого столбца.
- nulls_last
-
Помещать значения null в конец. Можно указать одно логическое значение для всех столбцов или последовательность логических значений для управления сортировкой каждого столбца.
- maintain_order
-
Следует ли сохранять порядок элементов с одинаковыми значениями. Обратите внимание: при
trueпотоковая обработка невозможна, а производительность может снизиться, поскольку для этого требуется стабильная сортировка. - multithreaded
-
Выполнять сортировку с использованием нескольких потоков.
Примеры
Передайте имя одного столбца, чтобы отсортировать данные по нему.
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, None], ... "b": [6.0, 5.0, 4.0], ... "c": ["a", "c", "b"], ... } ... ) >>> lf.sort("a").collect() shape: (3, 3) ┌──────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞══════╪═════╪═════╡ │ null ┆ 4.0 ┆ b │ │ 1 ┆ 6.0 ┆ a │ │ 2 ┆ 5.0 ┆ c │ └──────┴─────┴─────┘Также поддерживается сортировка по выражениям.
>>> lf.sort(pl.col("a") + pl.col("b") * 2, nulls_last=True).collect() shape: (3, 3) ┌──────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞══════╪═════╪═════╡ │ 2 ┆ 5.0 ┆ c │ │ 1 ┆ 6.0 ┆ a │ │ null ┆ 4.0 ┆ b │ └──────┴─────┴─────┘Чтобы отсортировать данные по нескольким столбцам, передайте список столбцов.
>>> lf.sort(["c", "a"], descending=True).collect() shape: (3, 3) ┌──────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞══════╪═════╪═════╡ │ 2 ┆ 5.0 ┆ c │ │ null ┆ 4.0 ┆ b │ │ 1 ┆ 6.0 ┆ a │ └──────┴─────┴─────┘
Или укажите несколько столбцов для сортировки в виде позиционных аргументов.
>>> lf.sort("c", "a", descending=[False, True]).collect() shape: (3, 3) ┌──────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ str │ ╞══════╪═════╪═════╡ │ 1 ┆ 6.0 ┆ a │ │ null ┆ 4.0 ┆ b │ │ 2 ┆ 5.0 ┆ c │ └──────┴─────┴─────┘
sort( by: IntoExpr | Iterable[IntoExpr], *more_by: IntoExpr, descending: bool | Sequence[bool] = False, nulls_last: bool | Sequence[bool] = False, maintain_order: bool = False, multithreaded: bool = True, ) → LazyFrame-
Выполнить SQL-запрос для LazyFrame.
Добавлено в версии 0.20.23.
Предупреждение
Эта функция считается нестабильной, хотя она близка к тому, чтобы считаться стабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- Параметры:
-
- query
-
SQL-запрос для выполнения.
- table_name
-
Необязательное явное имя таблицы, представляющей текущий фрейм (по умолчанию «self»).
См. также
Примечания
- Текущий LazyFrame автоматически регистрируется как таблица в SQLContext под именем «self». Чтобы получить доступ к DataFrame и LazyFrame из текущего пространства имён globals, используйте функцию верхнего уровня
pl.sql. - Для более гибкого управления регистрацией и выполнением используйте объект
SQLContext.
Примеры
>>> lf1 = pl.LazyFrame({"a": [1, 2, 3], "b": [6, 7, 8], "c": ["z", "y", "x"]}) >>> lf2 = pl.LazyFrame({"a": [3, 2, 1], "d": [125, -654, 888]})Выполнить SQL-запрос для LazyFrame:
>>> lf1.sql("SELECT c, b FROM self WHERE a > 1").collect() shape: (2, 2) ┌─────┬─────┐ │ c ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ y ┆ 7 │ │ x ┆ 8 │ └─────┴─────┘Применить преобразования SQL (переименовав «self» в «frame»), а затем выполнить фильтрацию средствами Polars (операции SQL и нативные операции можно свободно комбинировать):
>>> lf1.sql( ... query=''' ... SELECT ... a, ... (a % 2 == 0) AS a_is_even, ... (b::float4 / 2) AS "b/2", ... CONCAT_WS(':', c, c, c) AS c_c_c ... FROM frame ... ORDER BY a ... ''', ... table_name="frame", ... ).filter(~pl.col("c_c_c").str.starts_with("x")).collect() shape: (2, 4) ┌─────┬───────────┬─────┬───────┐ │ a ┆ a_is_even ┆ b/2 ┆ c_c_c │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ bool ┆ f32 ┆ str │ ╞═════╪═══════════╪═════╪═══════╡ │ 1 ┆ false ┆ 3.0 ┆ z:z:z │ │ 2 ┆ true ┆ 3.5 ┆ y:y:y │ └─────┴───────────┴─────┴───────┘
sql( query: str, *, table_name: str = 'self', ) → LazyFrame-
Вычислить стандартное отклонение для столбцов LazyFrame.
- Параметры:
-
- ddof
-
«Число степеней свободы»: делитель, используемый при вычислении, равен N - ddof, где N — количество элементов. По умолчанию ddof равен 1.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.std().collect() shape: (1, 2) ┌──────────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞══════════╪═════╡ │ 1.290994 ┆ 0.5 │ └──────────┴─────┘ >>> lf.std(ddof=0).collect() shape: (1, 2) ┌──────────┬──────────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞══════════╪══════════╡ │ 1.118034 ┆ 0.433013 │ └──────────┴──────────┘
std( ddof: int = 1, ) → LazyFrame-
Вычислить сумму значений столбцов LazyFrame.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.sum().collect() shape: (1, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 10 ┆ 5 │ └─────┴─────┘
sum() → LazyFrame
-
Получить последние
nстрок.- Параметры:
-
- n
-
Количество возвращаемых строк.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4, 5, 6], ... "b": [7, 8, 9, 10, 11, 12], ... } ... ) >>> lf.tail().collect() shape: (5, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 2 ┆ 8 │ │ 3 ┆ 9 │ │ 4 ┆ 10 │ │ 5 ┆ 11 │ │ 6 ┆ 12 │ └─────┴─────┘ >>> lf.tail(2).collect() shape: (2, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 5 ┆ 11 │ │ 6 ┆ 12 │ └─────┴─────┘
tail( n: int = 5, ) → LazyFrame-
Вернуть
kстрок с наибольшими значениями.Ненулевые элементы всегда имеют приоритет перед элементами null независимо от значения
reverse. Порядок результата не гарантируется; если нужно отсортировать результат, вызовитеsort()после этой функции.Изменено в версии 1.0.0: Параметр
descendingпереименован вreverse.- Параметры:
-
- k
-
Количество возвращаемых строк.
- by
-
Столбец или столбцы, по которым определяются строки с наибольшими значениями. Принимает выражения. Строки интерпретируются как имена столбцов.
- reverse
-
Выбрать
kнаименьших элементов столбца или столбцовby(вместоkнаибольших). Для отдельных столбцов можно передать последовательность логических значений.
См. также
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["a", "b", "a", "b", "b", "c"], ... "b": [2, 1, 1, 3, 2, 1], ... } ... )Получить строки с 4 наибольшими значениями в столбце b.
>>> lf.top_k(4, by="b").collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ b ┆ 3 │ │ a ┆ 2 │ │ b ┆ 2 │ │ b ┆ 1 │ └─────┴─────┘
Получить строки с 4 наибольшими значениями при сортировке по столбцам b и a.
>>> lf.top_k(4, by=["b", "a"]).collect() shape: (4, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ b ┆ 3 │ │ b ┆ 2 │ │ a ┆ 2 │ │ c ┆ 1 │ └─────┴─────┘
top_k( k: int, *, by: IntoExpr | Iterable[IntoExpr], reverse: bool | Sequence[bool] = False, ) → LazyFrame-
Удалить повторяющиеся строки из этого LazyFrame.
- Параметры:
-
- subset
-
Имена столбцов, селекторы или выражения, используемые для определения повторяющихся строк. Если задано
None(значение по умолчанию), учитываются все столбцы. -
keep{‘first’, ‘last’, ‘any’, ‘none’} -
Указывает, какие повторяющиеся строки следует оставить.
-
- ‘any’: не гарантирует, какая именно строка будет сохранена.
-
Это позволяет выполнить больше оптимизаций.
- ‘none’: не оставлять повторяющиеся строки.
- ‘first’: оставить первую уникальную строку.
- ‘last’: оставить последнюю уникальную строку.
-
- maintain_order
-
Сохранить порядок строк исходного DataFrame. Это требует больше вычислительных ресурсов. Если задать
True, запуск на потоковом движке будет невозможен.
- Возвращает:
-
- LazyFrame
-
LazyFrame с уникальными строками.
Примечания
Если вы используете Pandas, эта операция аналогична
pandas.DataFrame.drop_duplicates.Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3, 1, 1], ... "bar": ["a", "a", "a", "x", "x"], ... "ham": ["b", "b", "b", "y", "y"], ... } ... )По умолчанию при определении уникальных строк учитываются все столбцы:
>>> lf.unique(maintain_order=True).collect() shape: (4, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ a ┆ b │ │ 2 ┆ a ┆ b │ │ 3 ┆ a ┆ b │ │ 1 ┆ x ┆ y │ └─────┴─────┴─────┘
Также можно учитывать только подмножество столбцов и выбирать, какую строку оставить при обнаружении дубликатов:
>>> lf.unique(subset="foo", keep="first", maintain_order=True).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ a ┆ b │ │ 2 ┆ a ┆ b │ │ 3 ┆ a ┆ b │ └─────┴─────┴─────┘ >>> lf.unique(subset="foo", keep="last", maintain_order=True).collect() shape: (3, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═════╪═════╪═════╡ │ 2 ┆ a ┆ b │ │ 3 ┆ a ┆ b │ │ 1 ┆ x ┆ y │ └─────┴─────┴─────┘ >>> lf.unique(subset="foo", keep="none", maintain_order=True).collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═════╪═════╪═════╡ │ 2 ┆ a ┆ b │ │ 3 ┆ a ┆ b │ └─────┴─────┴─────┘
Для задания параметра «subset» можно использовать селекторы:
>>> import polars.selectors as cs >>> lf.unique(subset=cs.string(), maintain_order=True).collect() shape: (2, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ ham │ │ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ a ┆ b │ │ 1 ┆ x ┆ y │ └─────┴─────┴─────┘
В параметре «subset» также можно использовать произвольное выражение; в этом примере для определения уникальности используется часть метки перед символом «:»:
>>> lf = pl.LazyFrame( ... { ... "label": ["xx:1", "xx:2", "yy:3", "yy:4"], ... "value": [100, 200, 300, 400], ... } ... ) >>> lf.unique( ... subset=pl.col("label").str.extract(r"^(\w+):"), ... maintain_order=True, ... keep="first", ... ).collect() shape: (2, 2) ┌───────┬───────┐ │ label ┆ value │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═══════╪═══════╡ │ xx:1 ┆ 100 │ │ yy:3 ┆ 300 │ └───────┴───────┘
unique( subset: IntoExpr | Collection[IntoExpr] | None = None, *, keep: UniqueKeepStrategy = 'any', maintain_order: bool = False, ) → LazyFrame-
Развернуть столбцы struct в отдельные столбцы для каждого из их полей.
Новые столбцы будут вставлены в DataFrame на место столбца struct.
Если столбцы не указаны, будут развернуты все столбцы struct.
- Параметры:
-
- columns
-
Имя столбца или имена столбцов struct для разворачивания.
- *more_columns
-
Дополнительные столбцы для разворачивания, заданные как позиционные аргументы.
- separator
-
Переименовать выходные столбцы, объединив имя столбца struct, разделитель и имя поля.
Примеры
>>> df = pl.LazyFrame( ... { ... "before": ["foo", "bar"], ... "t_a": [1, 2], ... "t_b": ["a", "b"], ... "t_c": [True, None], ... "t_d": [[1, 2], [3]], ... "after": ["baz", "womp"], ... } ... ).select("before", pl.struct(pl.col("^t_.$")).alias("t_struct"), "after") >>> df.collect() shape: (2, 3) ┌────────┬─────────────────────┬───────┐ │ before ┆ t_struct ┆ after │ │ --- ┆ --- ┆ --- │ │ str ┆ struct[4] ┆ str │ ╞════════╪═════════════════════╪═══════╡ │ foo ┆ {1,"a",true,[1, 2]} ┆ baz │ │ bar ┆ {2,"b",null,[3]} ┆ womp │ └────────┴─────────────────────┴───────┘ >>> df.unnest("t_struct").collect() shape: (2, 6) ┌────────┬─────┬─────┬──────┬───────────┬───────┐ │ before ┆ t_a ┆ t_b ┆ t_c ┆ t_d ┆ after │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ str ┆ bool ┆ list[i64] ┆ str │ ╞════════╪═════╪═════╪══════╪═══════════╪═══════╡ │ foo ┆ 1 ┆ a ┆ true ┆ [1, 2] ┆ baz │ │ bar ┆ 2 ┆ b ┆ null ┆ [3] ┆ womp │ └────────┴─────┴─────┴──────┴───────────┴───────┘Развернуть все столбцы struct, вызвав метод без аргументов:
>>> df.unnest().collect() shape: (2, 6) ┌────────┬─────┬─────┬──────┬───────────┬───────┐ │ before ┆ t_a ┆ t_b ┆ t_c ┆ t_d ┆ after │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ str ┆ bool ┆ list[i64] ┆ str │ ╞════════╪═════╪═════╪══════╪═══════════╪═══════╡ │ foo ┆ 1 ┆ a ┆ true ┆ [1, 2] ┆ baz │ │ bar ┆ 2 ┆ b ┆ null ┆ [3] ┆ womp │ └────────┴─────┴─────┴──────┴───────────┴───────┘
>>> df = pl.LazyFrame( ... { ... "before": ["foo", "bar"], ... "t_a": [1, 2], ... "t_b": ["a", "b"], ... "t_c": [True, None], ... "t_d": [[1, 2], [3]], ... "after": ["baz", "womp"], ... } ... ).select( ... "before", ... pl.struct(pl.col("^t_.$").name.map(lambda t: t[2:])).alias("t"), ... "after", ... ) >>> df.unnest("t", separator="::").collect() shape: (2, 6) ┌────────┬──────┬──────┬──────┬───────────┬───────┐ │ before ┆ t::a ┆ t::b ┆ t::c ┆ t::d ┆ after │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ str ┆ bool ┆ list[i64] ┆ str │ ╞════════╪══════╪══════╪══════╪═══════════╪═══════╡ │ foo ┆ 1 ┆ a ┆ true ┆ [1, 2] ┆ baz │ │ bar ┆ 2 ┆ b ┆ null ┆ [3] ┆ womp │ └────────┴──────┴──────┴──────┴───────────┴───────┘
unnest( columns: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, *more_columns: ColumnNameOrSelector, separator: str | None = None, ) → LazyFrame-
Преобразовать DataFrame из широкого формата в длинный.
Столбцы-идентификаторы при этом можно оставить.
Эта функция позволяет преобразовать DataFrame в формат, где один или несколько столбцов являются переменными-идентификаторами (индексом), а все остальные столбцы, считающиеся измеряемыми переменными (on), «разворачиваются» по оси строк, оставляя только два столбца, не являющихся идентификаторами: ‘variable’ и ‘value’.
- Параметры:
-
- on
-
Столбец или столбцы, селекторы для выбора переменных-значений; если
onпуст, столбцы использоваться не будут. Если заданоNone(значение по умолчанию), будут использоваться все столбцы, отсутствующие вindex. - index
-
Столбец или столбцы, селекторы для выбора переменных-идентификаторов.
- variable_name
-
Имя столбца
variable. По умолчанию — «variable». - value_name
-
Имя столбца
value. По умолчанию — «value». - streamable
-
устарел
Примечания
Если вы используете pandas, эта операция аналогична
pandas.DataFrame.melt, ноindexиспользуется вместоid_vars, аon— вместоvalue_vars. В других библиотеках эта операция может называтьсяpivot_longer.Порядок строк в результате не определён.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": ["x", "y", "z"], ... "b": [1, 3, 5], ... "c": [2, 4, 6], ... } ... ) >>> import polars.selectors as cs >>> lf.unpivot(cs.numeric(), index="a").collect() shape: (6, 3) ┌─────┬──────────┬───────┐ │ a ┆ variable ┆ value │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i64 │ ╞═════╪══════════╪═══════╡ │ x ┆ b ┆ 1 │ │ y ┆ b ┆ 3 │ │ z ┆ b ┆ 5 │ │ x ┆ c ┆ 2 │ │ y ┆ c ┆ 4 │ │ z ┆ c ┆ 6 │ └─────┴──────────┴───────┘
unpivot( on: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, *, index: ColumnNameOrSelector | Sequence[ColumnNameOrSelector] | None = None, variable_name: str | None = None, value_name: str | None = None, streamable: bool = True, ) → LazyFrame-
Обновить значения в этом
LazyFrameзначениями изother.Предупреждение
Эта функция считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушением обратной совместимости.
- Параметры:
-
- other
-
LazyFrame, значения из которого будут использоваться для обновления
- on
-
Имена столбцов для соединения. Если задано
None(значение по умолчанию), в качестве ключа соединения используется неявный индекс строк каждого фрейма. -
how{‘left’, ‘inner’, ‘full’} -
- ‘left’ сохраняет все строки из левой таблицы; строки могут дублироваться, если нескольким строкам правого фрейма соответствует ключ строки левого фрейма.
- ‘inner’ сохраняет только строки, ключи которых есть в обоих фреймах.
- ‘full’ обновляет существующие строки с совпадающими ключами, а также добавляет новые строки из переданного фрейма.
- left_on
-
Столбец или столбцы левого DataFrame для соединения.
- right_on
-
Столбец или столбцы правого DataFrame для соединения.
- include_nulls
-
Перезаписывать значения левого фрейма значениями null из правого фрейма. Если задано
False(значение по умолчанию), значения null в правом фрейме игнорируются. -
maintain_order{‘none’, ‘left’, ‘right’, ‘left_right’, ‘right_left’} -
Определяет, порядок строк какого из входных фреймов нужно сохранить. Подробности см. в описании
join(). В отличие отjoinэта функция по умолчанию сохраняет порядок строк левого фрейма.
Примечания
Это синтаксический сахар для левого или внутреннего соединения, которое по умолчанию сохраняет порядок строк левого
DataFrame, с необязательным объединением столбцов, если заданоinclude_nulls = False.Примеры
>>> lf = pl.LazyFrame( ... { ... "A": [1, 2, 3, 4], ... "B": [400, 500, 600, 700], ... } ... ) >>> lf.collect() shape: (4, 2) ┌─────┬─────┐ │ A ┆ B │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 400 │ │ 2 ┆ 500 │ │ 3 ┆ 600 │ │ 4 ┆ 700 │ └─────┴─────┘ >>> new_lf = pl.LazyFrame( ... { ... "B": [-66, None, -99], ... "C": [5, 3, 1], ... } ... )Обновить значения
dfненулевыми значениями изnew_df, используя индекс строк:>>> lf.update(new_lf).collect() shape: (4, 2) ┌─────┬─────┐ │ A ┆ B │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ -66 │ │ 2 ┆ 500 │ │ 3 ┆ -99 │ │ 4 ┆ 700 │ └─────┴─────┘
Обновить значения
dfненулевыми значениями изnew_dfпо индексу строк, оставив только строки, общие для обоих фреймов:>>> lf.update(new_lf, how="inner").collect() shape: (3, 2) ┌─────┬─────┐ │ A ┆ B │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ -66 │ │ 2 ┆ 500 │ │ 3 ┆ -99 │ └─────┴─────┘
Обновить значения
dfненулевыми значениями изnew_dfс помощью стратегии полного внешнего соединения, явно задав столбцы для соединения в каждом фрейме:>>> lf.update(new_lf, left_on=["A"], right_on=["C"], how="full").collect() shape: (5, 2) ┌─────┬─────┐ │ A ┆ B │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ -99 │ │ 2 ┆ 500 │ │ 3 ┆ 600 │ │ 4 ┆ 700 │ │ 5 ┆ -66 │ └─────┴─────┘
Обновить значения
df, включая значения null изnew_df, с помощью стратегии полного внешнего соединения, явно задав столбцы для соединения в каждом фрейме:>>> lf.update( ... new_lf, left_on="A", right_on="C", how="full", include_nulls=True ... ).collect() shape: (5, 2) ┌─────┬──────┐ │ A ┆ B │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪══════╡ │ 1 ┆ -99 │ │ 2 ┆ 500 │ │ 3 ┆ null │ │ 4 ┆ 700 │ │ 5 ┆ -66 │ └─────┴──────┘
update( other: LazyFrame, on: str | Sequence[str] | None = None, how: Literal['left', 'inner', 'full'] = 'left', *, left_on: str | Sequence[str] | None = None, right_on: str | Sequence[str] | None = None, include_nulls: bool = False, maintain_order: MaintainOrderJoin | None = 'left', ) → LazyFrame-
Вычислить дисперсию столбцов LazyFrame.
- Параметры:
-
- ddof
-
«Число степеней свободы»: делитель, используемый при вычислении, равен N - ddof, где N — количество элементов. По умолчанию ddof равен 1.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [1, 2, 1, 1], ... } ... ) >>> lf.var().collect() shape: (1, 2) ┌──────────┬──────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞══════════╪══════╡ │ 1.666667 ┆ 0.25 │ └──────────┴──────┘ >>> lf.var(ddof=0).collect() shape: (1, 2) ┌──────┬────────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ f64 │ ╞══════╪════════╡ │ 1.25 ┆ 0.1875 │ └──────┴────────┘
var( ddof: int = 1, ) → LazyFrame-
Получить количество столбцов.
- Возвращает:
-
- int
Предупреждение
Чтобы определить ширину LazyFrame, необходимо разрешить его схему, что может быть затратной операцией. Идиоматичный способ разрешить схему — использовать
collect_schema(). Это свойство существует только для симметрии с классом DataFrame.См. также
-
collect_schema -
Schema.len
Примеры
>>> lf = pl.LazyFrame( ... { ... "foo": [1, 2, 3], ... "bar": [4, 5, 6], ... } ... ) >>> lf.width 2
property width: int
-
Добавить столбцы в этот LazyFrame.
Добавленные столбцы заменят существующие столбцы с такими же именами.
- Параметры:
-
- *exprs
-
Столбец или столбцы для добавления, заданные как позиционные аргументы. Принимаются выражения. Строки интерпретируются как имена столбцов, остальные аргументы, не являющиеся выражениями, — как литералы.
- **named_exprs
-
Дополнительные столбцы для добавления, заданные как именованные аргументы. Столбцам будут присвоены имена соответствующих аргументов.
- Возвращает:
-
- LazyFrame
-
Новый LazyFrame с добавленными столбцами.
Примечания
Создание нового LazyFrame с помощью этого метода не создаёт копию существующих данных.
Примеры
Передайте выражение, чтобы добавить его в качестве нового столбца.
>>> lf = pl.LazyFrame( ... { ... "a": [1, 2, 3, 4], ... "b": [0.5, 4, 10, 13], ... "c": [True, True, False, True], ... } ... ) >>> lf.with_columns((pl.col("a") ** 2).alias("a^2")).collect() shape: (4, 4) ┌─────┬──────┬───────┬─────┐ │ a ┆ b ┆ c ┆ a^2 │ │ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool ┆ i64 │ ╞═════╪══════╪═══════╪═════╡ │ 1 ┆ 0.5 ┆ true ┆ 1 │ │ 2 ┆ 4.0 ┆ true ┆ 4 │ │ 3 ┆ 10.0 ┆ false ┆ 9 │ │ 4 ┆ 13.0 ┆ true ┆ 16 │ └─────┴──────┴───────┴─────┘Добавленные столбцы заменят существующие столбцы с такими же именами.
>>> lf.with_columns(pl.col("a").cast(pl.Float64)).collect() shape: (4, 3) ┌─────┬──────┬───────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ f64 ┆ f64 ┆ bool │ ╞═════╪══════╪═══════╡ │ 1.0 ┆ 0.5 ┆ true │ │ 2.0 ┆ 4.0 ┆ true │ │ 3.0 ┆ 10.0 ┆ false │ │ 4.0 ┆ 13.0 ┆ true │ └─────┴──────┴───────┘Несколько столбцов можно добавить с помощью позиционных аргументов.
>>> lf.with_columns( ... (pl.col("a") ** 2).alias("a^2"), ... (pl.col("b") / 2).alias("b/2"), ... (pl.col("c").not_()).alias("not c"), ... ).collect() shape: (4, 6) ┌─────┬──────┬───────┬─────┬──────┬───────┐ │ a ┆ b ┆ c ┆ a^2 ┆ b/2 ┆ not c │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool ┆ i64 ┆ f64 ┆ bool │ ╞═════╪══════╪═══════╪═════╪══════╪═══════╡ │ 1 ┆ 0.5 ┆ true ┆ 1 ┆ 0.25 ┆ false │ │ 2 ┆ 4.0 ┆ true ┆ 4 ┆ 2.0 ┆ false │ │ 3 ┆ 10.0 ┆ false ┆ 9 ┆ 5.0 ┆ true │ │ 4 ┆ 13.0 ┆ true ┆ 16 ┆ 6.5 ┆ false │ └─────┴──────┴───────┴─────┴──────┴───────┘Несколько столбцов также можно добавить, передав список выражений.
>>> lf.with_columns( ... [ ... (pl.col("a") ** 2).alias("a^2"), ... (pl.col("b") / 2).alias("b/2"), ... (pl.col("c").not_()).alias("not c"), ... ] ... ).collect() shape: (4, 6) ┌─────┬──────┬───────┬─────┬──────┬───────┐ │ a ┆ b ┆ c ┆ a^2 ┆ b/2 ┆ not c │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool ┆ i64 ┆ f64 ┆ bool │ ╞═════╪══════╪═══════╪═════╪══════╪═══════╡ │ 1 ┆ 0.5 ┆ true ┆ 1 ┆ 0.25 ┆ false │ │ 2 ┆ 4.0 ┆ true ┆ 4 ┆ 2.0 ┆ false │ │ 3 ┆ 10.0 ┆ false ┆ 9 ┆ 5.0 ┆ true │ │ 4 ┆ 13.0 ┆ true ┆ 16 ┆ 6.5 ┆ false │ └─────┴──────┴───────┴─────┴──────┴───────┘Используйте именованные аргументы, чтобы легко задавать имена для выражений.
>>> lf.with_columns( ... ab=pl.col("a") * pl.col("b"), ... not_c=pl.col("c").not_(), ... ).collect() shape: (4, 5) ┌─────┬──────┬───────┬──────┬───────┐ │ a ┆ b ┆ c ┆ ab ┆ not_c │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool ┆ f64 ┆ bool │ ╞═════╪══════╪═══════╪══════╪═══════╡ │ 1 ┆ 0.5 ┆ true ┆ 0.5 ┆ false │ │ 2 ┆ 4.0 ┆ true ┆ 8.0 ┆ false │ │ 3 ┆ 10.0 ┆ false ┆ 30.0 ┆ true │ │ 4 ┆ 13.0 ┆ true ┆ 52.0 ┆ false │ └─────┴──────┴───────┴──────┴───────┘
with_columns( *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr, ) → LazyFrame-
-
Добавляет столбцы в этот LazyFrame.
Добавленные столбцы заменят существующие столбцы с теми же именами.
Все выражения будут выполняться последовательно, а не параллельно. Используйте этот метод, если вычисление каждого выражения требует мало ресурсов.
- Параметры:
-
- *exprs
-
Добавляемые столбцы, передаваемые в виде позиционных аргументов. Принимают выражения. Строки интерпретируются как имена столбцов, другие аргументы, не являющиеся выражениями, — как литералы.
- **named_exprs
-
Дополнительные столбцы, передаваемые в виде именованных аргументов. Столбцы будут переименованы в соответствии с именами аргументов.
- Возвращает:
-
- LazyFrame
-
Новый LazyFrame с добавленными столбцами.
См. также
with_columns_seq( *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr, ) → LazyFrame-
Добавляет внешний контекст в граф вычислений.
Устарело с версии 1.0.0: Вместо этого используйте
concat()сhow='horizontal'Это позволяет выражениям также обращаться к столбцам из DataFrame, не входящих в этот объект.
- Параметры:
-
- other
-
Lazy DataFrame для объединения.
Примеры
>>> lf = pl.LazyFrame({"a": [1, 2, 3], "b": ["a", "c", None]}) >>> lf_other = pl.LazyFrame({"c": ["foo", "ham"]}) >>> lf.with_context(lf_other).select( ... pl.col("b") + pl.col("c").first() ... ).collect() shape: (3, 1) ┌──────┐ │ b │ │ --- │ │ str │ ╞══════╡ │ afoo │ │ cfoo │ │ null │ └──────┘Заполните значения null медианой из другого DataFrame:
>>> train_lf = pl.LazyFrame( ... {"feature_0": [-1.0, 0, 1], "feature_1": [-1.0, 0, 1]} ... ) >>> test_lf = pl.LazyFrame( ... {"feature_0": [-1.0, None, 1], "feature_1": [-1.0, 0, 1]} ... ) >>> test_lf.with_context( ... train_lf.select(pl.all().name.suffix("_train")) ... ).select( ... pl.col("feature_0").fill_null(pl.col("feature_0_train").median()) ... ).collect() shape: (3, 1) ┌───────────┐ │ feature_0 │ │ --- │ │ f64 │ ╞═══════════╡ │ -1.0 │ │ 0.0 │ │ 1.0 │ └───────────┘
with_context( other: Self | list[Self], ) → LazyFrame-
Добавляет столбец с подсчётом строк по индексу 0.
Устарело с версии 0.20.4: Вместо этого используйте метод
with_row_index(). Обратите внимание, что имя столбца по умолчанию изменилось с ‘row_nr’ на ‘index’.- Параметры:
-
- name
-
Имя добавляемого столбца.
- offset
-
Начальное смещение для подсчёта строк.
Предупреждение
Это может отрицательно сказаться на производительности запросов. Например, это может блокировать оптимизацию проталкивания предикатов.
Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 3, 5], ... "b": [2, 4, 6], ... } ... ) >>> lf.with_row_count().collect() shape: (3, 3) ┌────────┬─────┬─────┐ │ row_nr ┆ a ┆ b │ │ --- ┆ --- ┆ --- │ │ u32 ┆ i64 ┆ i64 │ ╞════════╪═════╪═════╡ │ 0 ┆ 1 ┆ 2 │ │ 1 ┆ 3 ┆ 4 │ │ 2 ┆ 5 ┆ 6 │ └────────┴─────┴─────┘
with_row_count( name: str = 'row_nr', offset: int = 0, ) → LazyFrame-
Добавляет индекс строки в качестве первого столбца LazyFrame.
- Параметры:
-
- name
-
Имя столбца индекса.
- offset
-
Начальное смещение индекса. Не может быть отрицательным.
Предупреждение
Использование этой функции может отрицательно сказаться на производительности запросов. Например, это может блокировать оптимизацию проталкивания предикатов.
Примечания
Полученный столбец не обладает особыми свойствами. Это обычный столбец типа
UInt32(илиUInt64вpolars[rt64]).Примеры
>>> lf = pl.LazyFrame( ... { ... "a": [1, 3, 5], ... "b": [2, 4, 6], ... } ... ) >>> lf.with_row_index().collect() shape: (3, 3) ┌───────┬─────┬─────┐ │ index ┆ a ┆ b │ │ --- ┆ --- ┆ --- │ │ u32 ┆ i64 ┆ i64 │ ╞═══════╪═════╪═════╡ │ 0 ┆ 1 ┆ 2 │ │ 1 ┆ 3 ┆ 4 │ │ 2 ┆ 5 ┆ 6 │ └───────┴─────┴─────┘ >>> lf.with_row_index("id", offset=1000).collect() shape: (3, 3) ┌──────┬─────┬─────┐ │ id ┆ a ┆ b │ │ --- ┆ --- ┆ --- │ │ u32 ┆ i64 ┆ i64 │ ╞══════╪═════╪═════╡ │ 1000 ┆ 1 ┆ 2 │ │ 1001 ┆ 3 ┆ 4 │ │ 1002 ┆ 5 ┆ 6 │ └──────┴─────┴─────┘Столбец индекса также можно создать с помощью выражений
int_range()иlen().>>> lf.select( ... pl.int_range(pl.len(), dtype=pl.UInt32).alias("index"), ... pl.all(), ... ).collect() shape: (3, 3) ┌───────┬─────┬─────┐ │ index ┆ a ┆ b │ │ --- ┆ --- ┆ --- │ │ u32 ┆ i64 ┆ i64 │ ╞═══════╪═════╪═════╡ │ 0 ┆ 1 ┆ 2 │ │ 1 ┆ 3 ┆ 4 │ │ 2 ┆ 5 ┆ 6 │ └───────┴─────┴─────┘
with_row_index( name: str = 'index', offset: int = 0, ) → LazyFrame-
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/lazyframe/index.html