Селекторы
Селекторы позволяют более интуитивно выбирать столбцы из объектов DataFrame или LazyFrame на основе их имени, dtype или других свойств. Они объединяют и развивают соответствующие возможности, доступные через выражение col(), а также позволяют применять выражения ко всем выбранным столбцам.
Импорт
- Селекторы доступны в виде функций, импортируемых из
polars.selectors -
Обычно рекомендуется импортировать модуль как
csи использовать селекторы из него.import polars.selectors as cs import polars as pl df = pl.DataFrame( { "w": ["xx", "yy", "xx", "yy", "xx"], "x": [1, 2, 1, 4, -2], "y": [3.0, 4.5, 1.0, 2.5, -2.0], "z": ["a", "b", "a", "b", "b"], }, ) df.group_by(cs.string()).agg(cs.numeric().sum())
Операции над множествами
Селекторы поддерживают следующие операции над set:
Операция | Выражение |
|---|---|
|
|
|
|
|
|
|
|
|
|
Обратите внимание: как результаты отдельных селекторов, так и результаты операций над множествами селекторов всегда возвращают соответствующие столбцы в том же порядке, что и в схеме исходного фрейма.
Примеры
import polars.selectors as cs
import polars as pl
# set up an empty dataframe with plenty of columns of various dtypes
df = pl.DataFrame(
schema={
"abc": pl.UInt16,
"bbb": pl.UInt32,
"cde": pl.Float64,
"def": pl.Float32,
"eee": pl.Boolean,
"fgg": pl.Boolean,
"ghi": pl.Time,
"JJK": pl.Date,
"Lmn": pl.Duration,
"opp": pl.Datetime("ms"),
"qqR": pl.String,
},
)
# Select the UNION of temporal, strings and columns that start with "e"
assert df.select(cs.temporal() | cs.string() | cs.starts_with("e")).schema == {
"eee": pl.Boolean,
"ghi": pl.Time,
"JJK": pl.Date,
"Lmn": pl.Duration,
"opp": pl.Datetime("ms"),
"qqR": pl.String,
}
# Select the INTERSECTION of temporal and column names that match "opp" OR "JJK"
assert df.select(cs.temporal() & cs.matches("opp|JJK")).schema == {
"JJK": pl.Date,
"opp": pl.Datetime("ms"),
}
# Select the DIFFERENCE of temporal columns and columns that contain the name "opp" OR "JJK"
assert df.select(cs.temporal() - cs.matches("opp|JJK")).schema == {
"ghi": pl.Time,
"Lmn": pl.Duration,
}
# Select the SYMMETRIC DIFFERENCE of numeric columns and columns that contain an "e"
assert df.select(cs.contains("e") ^ cs.numeric()).schema == {
"abc": UInt16,
"bbb": UInt32,
"eee": Boolean,
}
# Select the COMPLEMENT of all columns of dtypes Duration and Time
assert df.select(~cs.by_dtype([pl.Duration, pl.Time])).schema == {
"abc": pl.UInt16,
"bbb": pl.UInt32,
"cde": pl.Float64,
"def": pl.Float32,
"eee": pl.Boolean,
"fgg": pl.Boolean,
"JJK": pl.Date,
"opp": pl.Datetime("ms"),
"qqR": pl.String,
}
Примечание
Если вы не хотите использовать операции над множествами селекторов, можно преобразовать их в expressions, вызвав as_expr. Это гарантирует, что операции OR, AND, etc будут применяться к исходным выражениям.
Функции
Доступные функции селекторов:
| Базовое выражение/прокси-селектор столбцов. |
| Выбрать все столбцы. |
| Выбрать все столбцы с алфавитными именами (например, состоящими только из букв). |
| Выбрать все столбцы с буквенно-цифровыми именами (например, состоящими только из букв и цифр 0–9). |
| Выбрать все столбцы типа Array. |
| Выбрать все двоичные столбцы. |
| Выбрать все логические столбцы. |
| Выбрать все столбцы, соответствующие указанным типам данных. |
| Выбрать все столбцы, соответствующие указанным индексам (или объектам диапазона). |
| Выбрать все столбцы с указанными именами. |
Выбрать все категориальные столбцы. | |
| Выбрать столбцы, имена которых содержат указанные буквальные подстроки. |
| Выбрать все столбцы типа Date. |
| Выбрать все столбцы типа Datetime с возможностью фильтрации по единице измерения времени и часовому поясу. |
| Выбрать все десятичные столбцы. |
| Выбрать все столбцы, имена которых состоят только из цифр. |
| Выбрать все столбцы типа Duration с возможностью фильтрации по единице измерения времени. |
| Выбрать столбцы, имена которых оканчиваются указанными подстроками. |
| Выбрать все столбцы типа Enum. |
| Выбрать все столбцы, кроме соответствующих указанным столбцам, типам данных или селекторам. |
| Развернуть селектор в имена столбцов относительно конкретного фрейма или целевой схемы. |
| Выбрать первый столбец в текущей области видимости. |
| Выбрать все столбцы с числами с плавающей точкой. |
| Выбрать все целочисленные столбцы. |
| Определить, является ли указанный объект/выражение селектором. |
| Выбрать последний столбец в текущей области видимости. |
| Выбрать все столбцы типа List. |
| Выбрать все столбцы, соответствующие указанному шаблону регулярного выражения. |
| Выбрать все вложенные столбцы. |
| Выбрать все числовые столбцы. |
Выбрать все целочисленные столбцы со знаком. | |
| Выбрать столбцы, имена которых начинаются с указанных подстрок. |
| Выбрать все строковые столбцы типа String и, при необходимости, Categorical. |
| Выбрать все столбцы типа Struct. |
| Выбрать все столбцы временных типов. |
| Выбрать все столбцы типа Time. |
Выбрать все беззнаковые целочисленные столбцы. |
-
Базовое выражение/прокси-селектор столбцов.
as_expr()Материализовать
selectorкак обычное выражение.exclude(columns, *more_columns)Исключить столбцы из выражения с несколькими столбцами.
-
Материализовать
selectorкак обычное выражение.Это гарантирует, что операторы
|,&,~и-применяются к данным, а не к наборам селекторов.Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "colx": ["aa", "bb", "cc"], ... "coly": [True, False, True], ... "colz": [1, 2, 3], ... } ... )Инверсия логического селектора выберет нелогические столбцы:
>>> df.select(~cs.boolean()) shape: (3, 2) ┌──────┬──────┐ │ colx ┆ colz │ │ --- ┆ --- │ │ str ┆ i64 │ ╞══════╪══════╡ │ aa ┆ 1 │ │ bb ┆ 2 │ │ cc ┆ 3 │ └──────┴──────┘
Чтобы инвертировать значения в выбранных логических столбцах, вместо этого нужно материализовать селектор как стандартное выражение:
>>> df.select(~cs.boolean().as_expr()) shape: (3, 1) ┌───────┐ │ coly │ │ --- │ │ bool │ ╞═══════╡ │ false │ │ true │ │ false │ └───────┘
as_expr() → Expr
-
Исключить столбцы из выражения с несколькими столбцами.
Работает только после выбора столбцов с помощью подстановочного знака или регулярного выражения. Нельзя одновременно указывать строковые имена столбцов и типы данных (вместо этого можно использовать селекторы).
- Параметры:
-
- columns
-
Имя или тип данных столбца (столбцов), который нужно исключить. Принимаются регулярные выражения. Регулярные выражения должны начинаться с
^и заканчиваться$. - *more_columns
-
Дополнительные имена или типы данных столбцов, которые нужно исключить; задаются позиционными аргументами.
exclude( columns: str | PolarsDataType | Collection[str | PolarsDataType], *more_columns: str | PolarsDataType, ) → Selector -
class polars.selectors.Selector
-
Выбрать все столбцы.
См. также
Примеры
>>> from datetime import date >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dt": [date(1999, 12, 31), date(2024, 1, 1)], ... "value": [1_234_500, 5_000_555], ... }, ... schema_overrides={"value": pl.Int32}, ... )Выбрать все столбцы и преобразовать их в строки:
>>> df.select(cs.all().cast(pl.String)) shape: (2, 2) ┌────────────┬─────────┐ │ dt ┆ value │ │ --- ┆ --- │ │ str ┆ str │ ╞════════════╪═════════╡ │ 1999-12-31 ┆ 1234500 │ │ 2024-01-01 ┆ 5000555 │ └────────────┴─────────┘
Выбрать все столбцы, кроме соответствующих указанным типам данных:
>>> df.select(cs.all() - cs.numeric()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 1999-12-31 │ │ 2024-01-01 │ └────────────┘
polars.selectors.all() → Selector
-
Выбрать все столбцы с алфавитными именами (например, состоящими только из букв).
- Параметры:
-
- ascii_only
-
Определяет, учитывать ли только алфавитные символы ASCII или весь диапазон допустимых букв Unicode (буквы с диакритическими знаками, иероглифы и т. д.).
- ignore_spaces
-
Определяет, следует ли игнорировать пробелы в именах столбцов; если да, учитываются только остальные символы (не пробелы).
Примечания
Имена выбранных столбцов не могут содержать никаких неалфавитных символов. По умолчанию определение «алфавитных» включает все допустимые алфавитные символы Unicode (
p{Alphabetic}); его можно изменить, задавascii_only=True.Примеры
>>> import polars as pl >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "no1": [100, 200, 300], ... "café": ["espresso", "latte", "mocha"], ... "t or f": [True, False, None], ... "hmm": ["aaa", "bbb", "ccc"], ... "都市": ["東京", "大阪", "京都"], ... } ... )Выбрать столбцы с алфавитными именами; обратите внимание, что здесь символы с диакритическими знаками и кандзи распознаются как алфавитные:
>>> df.select(cs.alpha()) shape: (3, 3) ┌──────────┬─────┬──────┐ │ café ┆ hmm ┆ 都市 │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ str │ ╞══════════╪═════╪══════╡ │ espresso ┆ aaa ┆ 東京 │ │ latte ┆ bbb ┆ 大阪 │ │ mocha ┆ ccc ┆ 京都 │ └──────────┴─────┴──────┘
Ограничить определение «алфавитных» только символами ASCII:
>>> df.select(cs.alpha(ascii_only=True)) shape: (3, 1) ┌─────┐ │ hmm │ │ --- │ │ str │ ╞═════╡ │ aaa │ │ bbb │ │ ccc │ └─────┘
>>> df.select(cs.alpha(ascii_only=True, ignore_spaces=True)) shape: (3, 2) ┌────────┬─────┐ │ t or f ┆ hmm │ │ --- ┆ --- │ │ bool ┆ str │ ╞════════╪═════╡ │ true ┆ aaa │ │ false ┆ bbb │ │ null ┆ ccc │ └────────┴─────┘
Выбрать все столбцы, кроме столбцов с алфавитными именами:
>>> df.select(~cs.alpha()) shape: (3, 2) ┌─────┬────────┐ │ no1 ┆ t or f │ │ --- ┆ --- │ │ i64 ┆ bool │ ╞═════╪════════╡ │ 100 ┆ true │ │ 200 ┆ false │ │ 300 ┆ null │ └─────┴────────┘
>>> df.select(~cs.alpha(ignore_spaces=True)) shape: (3, 1) ┌─────┐ │ no1 │ │ --- │ │ i64 │ ╞═════╡ │ 100 │ │ 200 │ │ 300 │ └─────┘
polars.selectors.alpha(
ascii_only: bool = False,
*,
ignore_spaces: bool = False,
) → Selector -
Выбрать все столбцы с буквенно-цифровыми именами (например, состоящими только из букв и цифр 0–9).
- Параметры:
-
- ascii_only
-
Определяет, учитывать ли только алфавитные символы ASCII или весь диапазон допустимых букв Unicode (буквы с диакритическими знаками, иероглифы и т. д.).
- ignore_spaces
-
Определяет, следует ли игнорировать пробелы в именах столбцов; если да, учитываются только остальные символы (не пробелы).
Примечания
Имена выбранных столбцов не могут содержать никаких неалфавитных символов или символов, отличных от цифр. По умолчанию определение «алфавитных» включает все допустимые алфавитные символы Unicode (
p{Alphabetic}), а также цифры (d); его можно изменить, задавascii_only=True.Примеры
>>> import polars as pl >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "1st_col": [100, 200, 300], ... "flagged": [True, False, True], ... "00prefix": ["01:aa", "02:bb", "03:cc"], ... "last col": ["x", "y", "z"], ... } ... )Выбрать столбцы с буквенно-цифровыми именами:
>>> df.select(cs.alphanumeric()) shape: (3, 2) ┌─────────┬──────────┐ │ flagged ┆ 00prefix │ │ --- ┆ --- │ │ bool ┆ str │ ╞═════════╪══════════╡ │ true ┆ 01:aa │ │ false ┆ 02:bb │ │ true ┆ 03:cc │ └─────────┴──────────┘
>>> df.select(cs.alphanumeric(ignore_spaces=True)) shape: (3, 3) ┌─────────┬──────────┬──────────┐ │ flagged ┆ 00prefix ┆ last col │ │ --- ┆ --- ┆ --- │ │ bool ┆ str ┆ str │ ╞═════════╪══════════╪══════════╡ │ true ┆ 01:aa ┆ x │ │ false ┆ 02:bb ┆ y │ │ true ┆ 03:cc ┆ z │ └─────────┴──────────┴──────────┘
Выбрать все столбцы, кроме столбцов с буквенно-цифровыми именами:
>>> df.select(~cs.alphanumeric()) shape: (3, 2) ┌─────────┬──────────┐ │ 1st_col ┆ last col │ │ --- ┆ --- │ │ i64 ┆ str │ ╞═════════╪══════════╡ │ 100 ┆ x │ │ 200 ┆ y │ │ 300 ┆ z │ └─────────┴──────────┘
>>> df.select(~cs.alphanumeric(ignore_spaces=True)) shape: (3, 1) ┌─────────┐ │ 1st_col │ │ --- │ │ i64 │ ╞═════════╡ │ 100 │ │ 200 │ │ 300 │ └─────────┘
polars.selectors.alphanumeric(
ascii_only: bool = False,
*,
ignore_spaces: bool = False,
) → Selector -
Выбрать все столбцы типа Array.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось нарушающим обратную совместимость изменением.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [["xx", "yy"], ["x", "y"]], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... }, ... schema_overrides={"foo": pl.Array(pl.String, 2)}, ... )Выбрать все столбцы типа Array:
>>> df.select(cs.array()) shape: (2, 1) ┌───────────────┐ │ foo │ │ --- │ │ array[str, 2] │ ╞═══════════════╡ │ ["xx", "yy"] │ │ ["x", "y"] │ └───────────────┘
Выбрать все столбцы, кроме столбцов типа Array:
>>> df.select(~cs.array()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
Выбрать все столбцы типа Array с заданным совпадающим внутренним типом:
>>> df.select(cs.array(cs.string())) shape: (2, 1) ┌───────────────┐ │ foo │ │ --- │ │ array[str, 2] │ ╞═══════════════╡ │ ["xx", "yy"] │ │ ["x", "y"] │ └───────────────┘ >>> df.select(cs.array(cs.integer())) shape: (0, 0) ┌┐ ╞╡ └┘ >>> df.select(cs.array(width=2)) shape: (2, 1) ┌───────────────┐ │ foo │ │ --- │ │ array[str, 2] │ ╞═══════════════╡ │ ["xx", "yy"] │ │ ["x", "y"] │ └───────────────┘ >>> df.select(cs.array(width=3)) shape: (0, 0) ┌┐ ╞╡ └┘
polars.selectors.array(
inner: Selector | None = None,
*,
width: int | None = None,
) → Selector -
Выбрать все двоичные столбцы.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame({"a": [b"hello"], "b": ["world"], "c": [b"!"], "d": [":)"]}) >>> df shape: (1, 4) ┌──────────┬───────┬────────┬─────┐ │ a ┆ b ┆ c ┆ d │ │ --- ┆ --- ┆ --- ┆ --- │ │ binary ┆ str ┆ binary ┆ str │ ╞══════════╪═══════╪════════╪═════╡ │ b"hello" ┆ world ┆ b"!" ┆ :) │ └──────────┴───────┴────────┴─────┘Выбрать двоичные столбцы и экспортировать их в виде словаря:
>>> df.select(cs.binary()).to_dict(as_series=False) {'a': [b'hello'], 'c': [b'!']}Выбрать все столбцы, кроме двоичных:
>>> df.select(~cs.binary()).to_dict(as_series=False) {'b': ['world'], 'd': [':)']}
polars.selectors.binary() → Selector
-
Выбрать все логические столбцы.
См. также
-
by_dtype -
Выбрать все столбцы, соответствующие указанным типам данных.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame({"n": range(1, 5)}).with_columns(n_even=pl.col("n") % 2 == 0) >>> df shape: (4, 2) ┌─────┬────────┐ │ n ┆ n_even │ │ --- ┆ --- │ │ i64 ┆ bool │ ╞═════╪════════╡ │ 1 ┆ false │ │ 2 ┆ true │ │ 3 ┆ false │ │ 4 ┆ true │ └─────┴────────┘Выбрать и инвертировать логические столбцы:
>>> df.with_columns(is_odd=cs.boolean().not_()) shape: (4, 3) ┌─────┬────────┬────────┐ │ n ┆ n_even ┆ is_odd │ │ --- ┆ --- ┆ --- │ │ i64 ┆ bool ┆ bool │ ╞═════╪════════╪════════╡ │ 1 ┆ false ┆ true │ │ 2 ┆ true ┆ false │ │ 3 ┆ false ┆ true │ │ 4 ┆ true ┆ false │ └─────┴────────┴────────┘
Выбрать все столбцы, кроме логических:
>>> df.select(~cs.boolean()) shape: (4, 1) ┌─────┐ │ n │ │ --- │ │ i64 │ ╞═════╡ │ 1 │ │ 2 │ │ 3 │ │ 4 │ └─────┘
-
polars.selectors.boolean() → Selector
-
Выбрать все столбцы, соответствующие указанным типам данных.
См. также
Примеры
>>> from datetime import date >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dt": [date(1999, 12, 31), date(2024, 1, 1), date(2010, 7, 5)], ... "value": [1_234_500, 5_000_555, -4_500_000], ... "other": ["foo", "bar", "foo"], ... } ... )Выбрать все столбцы с типом Date или String:
>>> df.select(cs.by_dtype(pl.Date, pl.String)) shape: (3, 2) ┌────────────┬───────┐ │ dt ┆ other │ │ --- ┆ --- │ │ date ┆ str │ ╞════════════╪═══════╡ │ 1999-12-31 ┆ foo │ │ 2024-01-01 ┆ bar │ │ 2010-07-05 ┆ foo │ └────────────┴───────┘
Выбрать все столбцы, тип которых не является Date или String:
>>> df.select(~cs.by_dtype(pl.Date, pl.String)) shape: (3, 1) ┌──────────┐ │ value │ │ --- │ │ i64 │ ╞══════════╡ │ 1234500 │ │ 5000555 │ │ -4500000 │ └──────────┘
Сгруппировать по строковым столбцам и просуммировать числовые столбцы:
>>> df.group_by(cs.string()).agg(cs.numeric().sum()).sort(by="other") shape: (2, 2) ┌───────┬──────────┐ │ other ┆ value │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═══════╪══════════╡ │ bar ┆ 5000555 │ │ foo ┆ -3265500 │ └───────┴──────────┘
polars.selectors.by_dtype(
*dtypes: PolarsDataType | PythonDataType | Iterable[PolarsDataType] | Iterable[PythonDataType],
) → Selector -
Выбрать все столбцы, соответствующие указанным индексам (или объектам диапазона).
- Параметры:
-
- *indices
-
Один или несколько индексов столбцов (или объектов диапазона). Поддерживается отрицательная индексация.
- require_all
-
По умолчанию все указанные индексы должны быть допустимыми; если индекс выходит за границы, возникает ошибка. Если задано значение
False, индексы за пределами допустимого диапазона игнорируются
См. также
Примечания
Выбранные столбцы возвращаются в том порядке, в котором их индексы указаны в селекторе, а не в порядке базовой схемы.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "key": ["abc"], ... **{f"c{i:02}": [0.5 * i] for i in range(100)}, ... }, ... ) >>> print(df) shape: (1, 101) ┌─────┬─────┬─────┬─────┬───┬──────┬──────┬──────┬──────┐ │ key ┆ c00 ┆ c01 ┆ c02 ┆ … ┆ c96 ┆ c97 ┆ c98 ┆ c99 │ │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═════╪═════╪═════╪═════╪═══╪══════╪══════╪══════╪══════╡ │ abc ┆ 0.0 ┆ 0.5 ┆ 1.0 ┆ … ┆ 48.0 ┆ 48.5 ┆ 49.0 ┆ 49.5 │ └─────┴─────┴─────┴─────┴───┴──────┴──────┴──────┴──────┘Выбрать столбцы по индексу (столбец «key» и первые/последние два столбца):
>>> df.select(cs.by_index(0, 1, 2, -2, -1)) shape: (1, 5) ┌─────┬─────┬─────┬──────┬──────┐ │ key ┆ c00 ┆ c01 ┆ c98 ┆ c99 │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═════╪═════╪═════╪══════╪══════╡ │ abc ┆ 0.0 ┆ 0.5 ┆ 49.0 ┆ 49.5 │ └─────┴─────┴─────┴──────┴──────┘
Выбрать столбец «key» и использовать объект
rangeдля выбора разных столбцов. Обратите внимание, что можно свободно комбинировать целочисленные индексы и объектыrange:>>> df.select(cs.by_index(0, range(1, 101, 20))) shape: (1, 6) ┌─────┬─────┬──────┬──────┬──────┬──────┐ │ key ┆ c00 ┆ c20 ┆ c40 ┆ c60 ┆ c80 │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═════╪═════╪══════╪══════╪══════╪══════╡ │ abc ┆ 0.0 ┆ 10.0 ┆ 20.0 ┆ 30.0 ┆ 40.0 │ └─────┴─────┴──────┴──────┴──────┴──────┘
>>> df.select(cs.by_index(0, range(101, 0, -25), require_all=False)) shape: (1, 5) ┌─────┬──────┬──────┬──────┬─────┐ │ key ┆ c75 ┆ c50 ┆ c25 ┆ c00 │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═════╪══════╪══════╪══════╪═════╡ │ abc ┆ 37.5 ┆ 25.0 ┆ 12.5 ┆ 0.0 │ └─────┴──────┴──────┴──────┴─────┘
Выбрать все столбцы, кроме столбцов с чётными индексами:
>>> df.select(~cs.by_index(range(1, 100, 2))) shape: (1, 51) ┌─────┬─────┬─────┬─────┬───┬──────┬──────┬──────┬──────┐ │ key ┆ c01 ┆ c03 ┆ c05 ┆ … ┆ c93 ┆ c95 ┆ c97 ┆ c99 │ │ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │ ╞═════╪═════╪═════╪═════╪═══╪══════╪══════╪══════╪══════╡ │ abc ┆ 0.5 ┆ 1.5 ┆ 2.5 ┆ … ┆ 46.5 ┆ 47.5 ┆ 48.5 ┆ 49.5 │ └─────┴─────┴─────┴─────┴───┴──────┴──────┴──────┴──────┘
polars.selectors.by_index(
*indices: int | range | Sequence[int | range],
require_all: bool = True,
) → Selector -
Выбрать все столбцы с указанными именами.
Добавлено в версии 0.20.27: Добавлен параметр
require_all.- Параметры:
-
- *names
-
Одно или несколько имён столбцов для выбора.
- require_all
-
Определяет, должны ли совпадать все имена (по умолчанию) или любое из них.
См. также
Примечания
Выбранные столбцы возвращаются в том порядке, в котором они указаны в селекторе, а не в порядке базовой схемы.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [False, True], ... } ... )Выбрать столбцы по имени:
>>> df.select(cs.by_name("foo", "bar")) shape: (2, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ x ┆ 123 │ │ y ┆ 456 │ └─────┴─────┘Выбрать любые из указанных столбцов по имени:
>>> df.select(cs.by_name("baz", "moose", "foo", "bear", require_all=False)) shape: (2, 2) ┌─────┬─────┐ │ baz ┆ foo │ │ --- ┆ --- │ │ f64 ┆ str │ ╞═════╪═════╡ │ 2.0 ┆ x │ │ 5.5 ┆ y │ └─────┴─────┘Выбрать все столбцы, кроме указанных:
>>> df.select(~cs.by_name("foo", "bar")) shape: (2, 2) ┌─────┬───────┐ │ baz ┆ zap │ │ --- ┆ --- │ │ f64 ┆ bool │ ╞═════╪═══════╡ │ 2.0 ┆ false │ │ 5.5 ┆ true │ └─────┴───────┘
polars.selectors.by_name(
*names: str | Collection[str],
require_all: bool = True,
) → Selector -
Выбрать все категориальные столбцы.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["xx", "yy"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... }, ... schema_overrides={"foo": pl.Categorical}, ... )Выбрать все категориальные столбцы:
>>> df.select(cs.categorical()) shape: (2, 1) ┌─────┐ │ foo │ │ --- │ │ cat │ ╞═════╡ │ xx │ │ yy │ └─────┘
Выбрать все столбцы, кроме категориальных:
>>> df.select(~cs.categorical()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
polars.selectors.categorical() → Selector
-
Выбрать столбцы, имена которых содержат указанные буквальные подстроки.
- Параметры:
-
- substring
-
Подстрока или подстроки, которые должны содержаться в именах выбранных столбцов.
См. также
-
matches -
Выбрать все столбцы, соответствующие указанному шаблону регулярного выражения.
-
ends_with -
Выбрать столбцы, имена которых оканчиваются указанными подстроками.
-
starts_with -
Выбрать столбцы, имена которых начинаются с указанных подстрок.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [False, True], ... } ... )Выбрать столбцы, содержащие подстроку «ba»:
>>> df.select(cs.contains("ba")) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘Выбрать столбцы, содержащие подстроку «ba» или букву «z»:
>>> df.select(cs.contains("ba", "z")) shape: (2, 3) ┌─────┬─────┬───────┐ │ bar ┆ baz ┆ zap │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ bool │ ╞═════╪═════╪═══════╡ │ 123 ┆ 2.0 ┆ false │ │ 456 ┆ 5.5 ┆ true │ └─────┴─────┴───────┘Выбрать все столбцы, кроме содержащих подстроку «ba»:
>>> df.select(~cs.contains("ba")) shape: (2, 2) ┌─────┬───────┐ │ foo ┆ zap │ │ --- ┆ --- │ │ str ┆ bool │ ╞═════╪═══════╡ │ x ┆ false │ │ y ┆ true │ └─────┴───────┘
polars.selectors.contains(
*substring: str,
) → Selector -
Выбрать все столбцы типа Date.
См. также
Примеры
>>> from datetime import date, datetime, time >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dtm": [datetime(2001, 5, 7, 10, 25), datetime(2031, 12, 31, 0, 30)], ... "dt": [date(1999, 12, 31), date(2024, 8, 9)], ... "tm": [time(0, 0, 0), time(23, 59, 59)], ... }, ... )Выбрать все столбцы типа Date:
>>> df.select(cs.date()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 1999-12-31 │ │ 2024-08-09 │ └────────────┘
Выбрать все столбцы, кроме столбцов типа Date:
>>> df.select(~cs.date()) shape: (2, 2) ┌─────────────────────┬──────────┐ │ dtm ┆ tm │ │ --- ┆ --- │ │ datetime[μs] ┆ time │ ╞═════════════════════╪══════════╡ │ 2001-05-07 10:25:00 ┆ 00:00:00 │ │ 2031-12-31 00:30:00 ┆ 23:59:59 │ └─────────────────────┴──────────┘
polars.selectors.date() → Selector
-
Выбрать все столбцы типа Datetime с возможностью фильтрации по единице измерения времени и часовому поясу.
- Параметры:
-
- time_unit
-
Одна или несколько допустимых строк точности единицы времени: «ms», «us» и «ns». Не указывайте параметр, чтобы выбрать столбцы с любой допустимой единицей времени.
- time_zone
-
- Одна или несколько строк часовых поясов в формате zoneinfo (чтобы просмотреть допустимые значения, выполните
import zoneinfo; zoneinfo.available_timezones()для получения полного списка). - Задайте
None, чтобы выбрать столбцы Datetime без часового пояса. - Задайте «*», чтобы выбрать столбцы Datetime с любым часовым поясом.
- Одна или несколько строк часовых поясов в формате zoneinfo (чтобы просмотреть допустимые значения, выполните
См. также
Примеры
>>> from datetime import datetime, date, timezone >>> import polars.selectors as cs >>> from zoneinfo import ZoneInfo >>> tokyo_tz = ZoneInfo("Asia/Tokyo") >>> utc_tz = timezone.utc >>> df = pl.DataFrame( ... { ... "tstamp_tokyo": [ ... datetime(1999, 7, 21, 5, 20, 16, 987654, tzinfo=tokyo_tz), ... datetime(2000, 5, 16, 6, 21, 21, 123465, tzinfo=tokyo_tz), ... ], ... "tstamp_utc": [ ... datetime(2023, 4, 10, 12, 14, 16, 999000, tzinfo=utc_tz), ... datetime(2025, 8, 25, 14, 18, 22, 666000, tzinfo=utc_tz), ... ], ... "tstamp": [ ... datetime(2000, 11, 20, 18, 12, 16, 600000), ... datetime(2020, 10, 30, 10, 20, 25, 123000), ... ], ... "dt": [date(1999, 12, 31), date(2010, 7, 5)], ... }, ... schema_overrides={ ... "tstamp_tokyo": pl.Datetime("ns", "Asia/Tokyo"), ... "tstamp_utc": pl.Datetime("us", "UTC"), ... }, ... )Выбрать все столбцы типа Datetime:
>>> df.select(cs.datetime()) shape: (2, 3) ┌────────────────────────────────┬─────────────────────────────┬─────────────────────────┐ │ tstamp_tokyo ┆ tstamp_utc ┆ tstamp │ │ --- ┆ --- ┆ --- │ │ datetime[ns, Asia/Tokyo] ┆ datetime[μs, UTC] ┆ datetime[μs] │ ╞════════════════════════════════╪═════════════════════════════╪═════════════════════════╡ │ 1999-07-21 05:20:16.987654 JST ┆ 2023-04-10 12:14:16.999 UTC ┆ 2000-11-20 18:12:16.600 │ │ 2000-05-16 06:21:21.123465 JST ┆ 2025-08-25 14:18:22.666 UTC ┆ 2020-10-30 10:20:25.123 │ └────────────────────────────────┴─────────────────────────────┴─────────────────────────┘
Выбрать все столбцы типа Datetime с точностью «us»:
>>> df.select(cs.datetime("us")) shape: (2, 2) ┌─────────────────────────────┬─────────────────────────┐ │ tstamp_utc ┆ tstamp │ │ --- ┆ --- │ │ datetime[μs, UTC] ┆ datetime[μs] │ ╞═════════════════════════════╪═════════════════════════╡ │ 2023-04-10 12:14:16.999 UTC ┆ 2000-11-20 18:12:16.600 │ │ 2025-08-25 14:18:22.666 UTC ┆ 2020-10-30 10:20:25.123 │ └─────────────────────────────┴─────────────────────────┘Выбрать все столбцы типа Datetime с любым часовым поясом:
>>> df.select(cs.datetime(time_zone="*")) shape: (2, 2) ┌────────────────────────────────┬─────────────────────────────┐ │ tstamp_tokyo ┆ tstamp_utc │ │ --- ┆ --- │ │ datetime[ns, Asia/Tokyo] ┆ datetime[μs, UTC] │ ╞════════════════════════════════╪═════════════════════════════╡ │ 1999-07-21 05:20:16.987654 JST ┆ 2023-04-10 12:14:16.999 UTC │ │ 2000-05-16 06:21:21.123465 JST ┆ 2025-08-25 14:18:22.666 UTC │ └────────────────────────────────┴─────────────────────────────┘
Выбрать все столбцы типа Datetime с определённым часовым поясом:
>>> df.select(cs.datetime(time_zone="UTC")) shape: (2, 1) ┌─────────────────────────────┐ │ tstamp_utc │ │ --- │ │ datetime[μs, UTC] │ ╞═════════════════════════════╡ │ 2023-04-10 12:14:16.999 UTC │ │ 2025-08-25 14:18:22.666 UTC │ └─────────────────────────────┘
Выбрать все столбцы типа Datetime без часового пояса:
>>> df.select(cs.datetime(time_zone=None)) shape: (2, 1) ┌─────────────────────────┐ │ tstamp │ │ --- │ │ datetime[μs] │ ╞═════════════════════════╡ │ 2000-11-20 18:12:16.600 │ │ 2020-10-30 10:20:25.123 │ └─────────────────────────┘
Выбрать все столбцы, кроме столбцов типа Datetime:
>>> df.select(~cs.datetime()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 1999-12-31 │ │ 2010-07-05 │ └────────────┘
polars.selectors.datetime(
time_unit: TimeUnit | Collection[TimeUnit] | None = None,
time_zone: str | pytimezone | Collection[str | pytimezone | None] | None = ('*',
None,
), ) → Selector -
Выбрать все десятичные столбцы.
См. также
Примеры
>>> from decimal import Decimal as D >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [D(123), D(456)], ... "baz": [D("2.0005"), D("-50.5555")], ... }, ... schema_overrides={"baz": pl.Decimal(scale=5, precision=10)}, ... )Выбрать все десятичные столбцы:
>>> df.select(cs.decimal()) shape: (2, 2) ┌───────────────┬───────────────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ decimal[38,0] ┆ decimal[10,5] │ ╞═══════════════╪═══════════════╡ │ 123 ┆ 2.00050 │ │ 456 ┆ -50.55550 │ └───────────────┴───────────────┘
Выбрать все столбцы, кроме десятичных:
>>> df.select(~cs.decimal()) shape: (2, 1) ┌─────┐ │ foo │ │ --- │ │ str │ ╞═════╡ │ x │ │ y │ └─────┘
polars.selectors.decimal() → Selector
-
Выбрать все столбцы, имена которых состоят только из цифр.
Примечания
Имена выбранных столбцов не могут содержать никаких символов, кроме цифр. По умолчанию определение «цифр» включает все допустимые цифры Unicode (
d); его можно изменить, задавascii_only=True.Примеры
>>> import polars as pl >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "key": ["aaa", "bbb", "aaa", "bbb", "bbb"], ... "year": [2001, 2001, 2025, 2025, 2001], ... "value": [-25, 100, 75, -15, -5], ... } ... ).pivot( ... values="value", ... index="key", ... on="year", ... aggregate_function="sum", ... ) >>> print(df) shape: (2, 3) ┌─────┬──────┬──────┐ │ key ┆ 2001 ┆ 2025 │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪══════╪══════╡ │ aaa ┆ -25 ┆ 75 │ │ bbb ┆ 95 ┆ -15 │ └─────┴──────┴──────┘Выбрать столбцы с именами, состоящими из цифр:
>>> df.select(cs.digit()) shape: (2, 2) ┌──────┬──────┐ │ 2001 ┆ 2025 │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞══════╪══════╡ │ -25 ┆ 75 │ │ 95 ┆ -15 │ └──────┴──────┘
Выбрать все столбцы, кроме столбцов с именами, состоящими из цифр:
>>> df.select(~cs.digit()) shape: (2, 1) ┌─────┐ │ key │ │ --- │ │ str │ ╞═════╡ │ aaa │ │ bbb │ └─────┘
Демонстрация использования флага
ascii_only(по умолчанию учитываются все допустимые цифры Unicode, но можно ограничить выбор символами ASCII 0–9):>>> df = pl.DataFrame({"१९९९": [1999], "२०७७": [2077], "3000": [3000]}) >>> df.select(cs.digit()) shape: (1, 3) ┌──────┬──────┬──────┐ │ १९९९ ┆ २०७७ ┆ 3000 │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 │ ╞══════╪══════╪══════╡ │ 1999 ┆ 2077 ┆ 3000 │ └──────┴──────┴──────┘>>> df.select(cs.digit(ascii_only=True)) shape: (1, 1) ┌──────┐ │ 3000 │ │ --- │ │ i64 │ ╞══════╡ │ 3000 │ └──────┘
polars.selectors.digit(
ascii_only: bool = False,
) → Selector -
Выбрать все столбцы типа Duration с возможностью фильтрации по единице измерения времени.
- Параметры:
-
- time_unit
-
Одна или несколько допустимых строк точности единицы времени: «ms», «us» и «ns». Не указывайте параметр, чтобы выбрать столбцы с любой допустимой единицей времени.
См. также
Примеры
>>> from datetime import date, timedelta >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dt": [date(2022, 1, 31), date(2025, 7, 5)], ... "td1": [ ... timedelta(days=1, milliseconds=123456), ... timedelta(days=1, hours=23, microseconds=987000), ... ], ... "td2": [ ... timedelta(days=7, microseconds=456789), ... timedelta(days=14, minutes=999, seconds=59), ... ], ... "td3": [ ... timedelta(weeks=4, days=-10, microseconds=999999), ... timedelta(weeks=3, milliseconds=123456, microseconds=1), ... ], ... }, ... schema_overrides={ ... "td1": pl.Duration("ms"), ... "td2": pl.Duration("us"), ... "td3": pl.Duration("ns"), ... }, ... )Выбрать все столбцы типа Duration:
>>> df.select(cs.duration()) shape: (2, 3) ┌────────────────┬─────────────────┬────────────────────┐ │ td1 ┆ td2 ┆ td3 │ │ --- ┆ --- ┆ --- │ │ duration[ms] ┆ duration[μs] ┆ duration[ns] │ ╞════════════════╪═════════════════╪════════════════════╡ │ 1d 2m 3s 456ms ┆ 7d 456789µs ┆ 18d 999999µs │ │ 1d 23h 987ms ┆ 14d 16h 39m 59s ┆ 21d 2m 3s 456001µs │ └────────────────┴─────────────────┴────────────────────┘
Выбрать все столбцы типа Duration с точностью «ms»:
>>> df.select(cs.duration("ms")) shape: (2, 1) ┌────────────────┐ │ td1 │ │ --- │ │ duration[ms] │ ╞════════════════╡ │ 1d 2m 3s 456ms │ │ 1d 23h 987ms │ └────────────────┘Выбрать все столбцы типа Duration с точностью «ms» ИЛИ «ns»:
>>> df.select(cs.duration(["ms", "ns"])) shape: (2, 2) ┌────────────────┬────────────────────┐ │ td1 ┆ td3 │ │ --- ┆ --- │ │ duration[ms] ┆ duration[ns] │ ╞════════════════╪════════════════════╡ │ 1d 2m 3s 456ms ┆ 18d 999999µs │ │ 1d 23h 987ms ┆ 21d 2m 3s 456001µs │ └────────────────┴────────────────────┘
Выбрать все столбцы, кроме столбцов типа Duration:
>>> df.select(~cs.duration()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 2022-01-31 │ │ 2025-07-05 │ └────────────┘
polars.selectors.duration(
time_unit: TimeUnit | Collection[TimeUnit] | None = None,
) → Selector -
Выбрать столбцы, названия которых заканчиваются заданной подстрокой или подстроками.
- Параметры:
-
- suffix
-
Подстрока или подстроки, которыми должны заканчиваться названия выбираемых столбцов.
См. также
-
contains -
Выбрать столбцы, содержащие заданную буквальную подстроку или подстроки.
-
matches -
Выбрать все столбцы, соответствующие заданному шаблону регулярного выражения.
-
starts_with -
Выбрать столбцы, названия которых начинаются с заданной подстроки или подстрок.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [False, True], ... } ... )Выбрать столбцы, названия которых заканчиваются подстрокой «z»:
>>> df.select(cs.ends_with("z")) shape: (2, 1) ┌─────┐ │ baz │ │ --- │ │ f64 │ ╞═════╡ │ 2.0 │ │ 5.5 │ └─────┘Выбрать столбцы, названия которых заканчиваются либо буквой «z», либо «r»:
>>> df.select(cs.ends_with("z", "r")) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘Выбрать все столбцы, кроме тех, названия которых заканчиваются подстрокой «z»:
>>> df.select(~cs.ends_with("z")) shape: (2, 3) ┌─────┬─────┬───────┐ │ foo ┆ bar ┆ zap │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ bool │ ╞═════╪═════╪═══════╡ │ x ┆ 123 ┆ false │ │ y ┆ 456 ┆ true │ └─────┴─────┴───────┘
polars.selectors.ends_with(
*suffix: str,
) → Selector -
Выбрать все столбцы типа enum.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и это не будет считаться нарушением обратной совместимости.
См. также
-
by_dtype -
Выбрать все столбцы, соответствующие заданному типу или типам данных.
-
categorical -
Выбрать все категориальные столбцы.
-
string -
Выбрать все строковые столбцы (при необходимости включая категориальные).
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["xx", "yy"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... }, ... schema_overrides={"foo": pl.Enum(["xx", "yy"])}, ... )Выбрать все столбцы типа enum:
>>> df.select(cs.enum()) shape: (2, 1) ┌──────┐ │ foo │ │ --- │ │ enum │ ╞══════╡ │ xx │ │ yy │ └──────┘
Выбрать все столбцы, кроме тех, которые имеют тип enum:
>>> df.select(~cs.enum()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
-
polars.selectors.enum() → Selector
-
Выбрать все столбцы, кроме соответствующих заданным столбцам, типам данных или селекторам.
- Параметры:
-
- columns
-
Один или несколько столбцов (col или имя), типов данных, столбцов или селекторов, обозначающих столбцы, которые нужно исключить.
- *more_columns
-
Дополнительные столбцы, типы данных или селекторы для исключения, заданные как позиционные аргументы.
Примечания
Если нужно исключить один селектор, проще записать это как
~selector.Примеры
Исключение по имени столбца или именам столбцов:
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "aa": [1, 2, 3], ... "ba": ["a", "b", None], ... "cc": [None, 2.5, 1.5], ... } ... ) >>> df.select(cs.exclude("ba", "xx")) shape: (3, 2) ┌─────┬──────┐ │ aa ┆ cc │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪══════╡ │ 1 ┆ null │ │ 2 ┆ 2.5 │ │ 3 ┆ 1.5 │ └─────┴──────┘Исключение с использованием имени столбца, селектора и типа данных:
>>> df.select(cs.exclude("aa", cs.string(), pl.UInt32)) shape: (3, 1) ┌──────┐ │ cc │ │ --- │ │ f64 │ ╞══════╡ │ null │ │ 2.5 │ │ 1.5 │ └──────┘
polars.selectors.exclude(
columns: str | PolarsDataType | Selector | Expr | Collection[str | PolarsDataType | Selector | Expr],
*more_columns: str | PolarsDataType | Selector | Expr,
) → Selector -
Развернуть селектор в имена столбцов с учетом определенного фрейма или целевой схемы.
Добавлено в версии 0.20.30: Добавлен параметр
strict.- Параметры:
-
- target
-
DataFrame, LazyFrame или Schema Polars.
- selector
-
Произвольный селектор polars (или составной селектор).
- strict
-
Если задать False, дополнительно разрешается разворачивать более широкий набор выражений выбора столбцов (например, отдельные столбцы или использование
.exclude()), а не только специальные селекторы.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "colx": ["a", "b", "c"], ... "coly": [123, 456, 789], ... "colz": [2.0, 5.5, 8.0], ... } ... )Развернуть селектор с учетом существующего
DataFrame:>>> cs.expand_selector(df, cs.numeric()) ('coly', 'colz') >>> cs.expand_selector(df, cs.first() | cs.last()) ('colx', 'colz')Это также работает с
LazyFrame:>>> cs.expand_selector(df.lazy(), ~(cs.first() | cs.last())) ('coly',)Развернуть селектор с учетом отдельного словаря
Schema:>>> schema = { ... "id": pl.Int64, ... "desc": pl.String, ... "count": pl.UInt32, ... "value": pl.Float64, ... } >>> cs.expand_selector(schema, cs.string() | cs.float()) ('desc', 'value')Разрешить разворачивать нестрогие выражения выбора (например, содержащие ограничение
.exclude()):>>> cs.expand_selector(schema, cs.numeric().exclude("id"), strict=False) ('count', 'value')
polars.selectors.expand_selector(
target: DataFrame | LazyFrame | Mapping[str,
PolarsDataType],
selector: Selector | Expr,
*,
strict: bool = True,
) → tuple[str, ...] -
Выбрать первый столбец в текущей области видимости.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0, 1], ... } ... )Выбрать первый столбец:
>>> df.select(cs.first()) shape: (2, 1) ┌─────┐ │ foo │ │ --- │ │ str │ ╞═════╡ │ x │ │ y │ └─────┘
Выбрать все, кроме первого столбца:
>>> df.select(~cs.first()) shape: (2, 3) ┌─────┬─────┬─────┐ │ bar ┆ baz ┆ zap │ │ --- ┆ --- ┆ --- │ │ i64 ┆ f64 ┆ i64 │ ╞═════╪═════╪═════╡ │ 123 ┆ 2.0 ┆ 0 │ │ 456 ┆ 5.5 ┆ 1 │ └─────┴─────┴─────┘
polars.selectors.first(
*,
strict: bool = True,
) → Selector -
Выбрать все столбцы с плавающей точкой.
См. также
-
integer -
Выбрать все целочисленные столбцы.
-
numeric -
Выбрать все числовые столбцы.
-
signed_integer -
Выбрать все столбцы со знаковыми целыми числами.
-
unsigned_integer -
Выбрать все столбцы с беззнаковыми целыми числами.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0.0, 1.0], ... }, ... schema_overrides={"baz": pl.Float32, "zap": pl.Float64}, ... )Выбрать все столбцы с плавающей точкой:
>>> df.select(cs.float()) shape: (2, 2) ┌─────┬─────┐ │ baz ┆ zap │ │ --- ┆ --- │ │ f32 ┆ f64 │ ╞═════╪═════╡ │ 2.0 ┆ 0.0 │ │ 5.5 ┆ 1.0 │ └─────┴─────┘
Выбрать все столбцы, кроме тех, которые содержат числа с плавающей точкой:
>>> df.select(~cs.float()) shape: (2, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ x ┆ 123 │ │ y ┆ 456 │ └─────┴─────┘
-
polars.selectors.float() → Selector
-
Выбрать все целочисленные столбцы.
См. также
-
by_dtype -
Выбрать столбцы по типу данных.
-
float -
Выбрать все столбцы с плавающей точкой.
-
numeric -
Выбрать все числовые столбцы.
-
signed_integer -
Выбрать все столбцы со знаковыми целыми числами.
-
unsigned_integer -
Выбрать все столбцы с беззнаковыми целыми числами.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0, 1], ... } ... )Выбрать все целочисленные столбцы:
>>> df.select(cs.integer()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ zap │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 123 ┆ 0 │ │ 456 ┆ 1 │ └─────┴─────┘
Выбрать все столбцы, кроме тех, которые являются целочисленными:
>>> df.select(~cs.integer()) shape: (2, 2) ┌─────┬─────┐ │ foo ┆ baz │ │ --- ┆ --- │ │ str ┆ f64 │ ╞═════╪═════╡ │ x ┆ 2.0 │ │ y ┆ 5.5 │ └─────┴─────┘
-
polars.selectors.integer() → Selector
-
Определить, является ли заданный объект или выражение селектором.
Примеры
>>> from polars.selectors import is_selector >>> import polars.selectors as cs >>> is_selector(pl.col("colx")) False >>> is_selector(cs.first() | cs.last()) True
polars.selectors.is_selector(
obj: Any,
) → TypeIs[Selector] -
Выбрать последний столбец в текущей области видимости.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0, 1], ... } ... )Выбрать последний столбец:
>>> df.select(cs.last()) shape: (2, 1) ┌─────┐ │ zap │ │ --- │ │ i64 │ ╞═════╡ │ 0 │ │ 1 │ └─────┘
Выбрать все, кроме последнего столбца:
>>> df.select(~cs.last()) shape: (2, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ baz │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ f64 │ ╞═════╪═════╪═════╡ │ x ┆ 123 ┆ 2.0 │ │ y ┆ 456 ┆ 5.5 │ └─────┴─────┴─────┘
polars.selectors.last(
*,
strict: bool = True,
) → Selector -
Выбрать все столбцы-списки.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и это не будет считаться нарушением обратной совместимости.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [["xx", "yy"], ["x"]], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... }, ... )Выбрать все столбцы-списки:
>>> df.select(cs.list()) shape: (2, 1) ┌──────────────┐ │ foo │ │ --- │ │ list[str] │ ╞══════════════╡ │ ["xx", "yy"] │ │ ["x"] │ └──────────────┘
Выбрать все столбцы, кроме тех, которые являются списками:
>>> df.select(~cs.list()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
Выбрать все столбцы-списки с заданным совпадающим внутренним типом:
>>> df.select(cs.list(cs.string())) shape: (2, 1) ┌──────────────┐ │ foo │ │ --- │ │ list[str] │ ╞══════════════╡ │ ["xx", "yy"] │ │ ["x"] │ └──────────────┘ >>> df.select(cs.list(cs.integer())) shape: (0, 0) ┌┐ ╞╡ └┘
polars.selectors.list(
inner: None | Selector = None,
) → Selector -
Выбрать все столбцы, соответствующие заданному шаблону регулярного выражения.
- Параметры:
-
- pattern
-
Корректный шаблон регулярного выражения, совместимый с библиотекой regex.
См. также
-
contains -
Выбрать все столбцы, содержащие заданную подстроку.
-
ends_with -
Выбрать все столбцы, названия которых заканчиваются заданной подстрокой или подстроками.
-
starts_with -
Выбрать все столбцы, названия которых начинаются с заданной подстроки или подстрок.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0, 1], ... } ... )Найти названия столбцов, содержащие «a», перед которой стоит символ, отличный от «z»:
>>> df.select(cs.matches("[^z]a")) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘Не находить названия столбцов, заканчивающиеся на «R» или «z» (без учета регистра):
>>> df.select(~cs.matches(r"(?i)R|z$")) shape: (2, 2) ┌─────┬─────┐ │ foo ┆ zap │ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════╪═════╡ │ x ┆ 0 │ │ y ┆ 1 │ └─────┴─────┘
polars.selectors.matches(
pattern: str,
) → Selector -
Выбрать все вложенные столбцы.
Вложенный столбец — это список, массив или структура.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и это не будет считаться нарушением обратной совместимости.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [{"a": "xx", "b": "z"}, {"a": "x", "b": "y"}], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "wow": [[1, 2], [3]], ... }, ... )Выбрать все вложенные столбцы:
>>> df.select(cs.nested()) shape: (2, 2) ┌────────────┬───────────┐ │ foo ┆ wow │ │ --- ┆ --- │ │ struct[2] ┆ list[i64] │ ╞════════════╪═══════════╡ │ {"xx","z"} ┆ [1, 2] │ │ {"x","y"} ┆ [3] │ └────────────┴───────────┘Выбрать все столбцы, кроме вложенных:
>>> df.select(~cs.nested()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
polars.selectors.nested() → Selector
-
Выбрать все числовые столбцы.
См. также
-
by_dtype -
Выбрать столбцы по типу данных.
-
float -
Выбрать все столбцы с плавающей точкой.
-
integer -
Выбрать все целочисленные столбцы.
-
signed_integer -
Выбрать все столбцы со знаковыми целыми числами.
-
unsigned_integer -
Выбрать все столбцы с беззнаковыми целыми числами.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": ["x", "y"], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... "zap": [0, 0], ... }, ... schema_overrides={"bar": pl.Int16, "baz": pl.Float32, "zap": pl.UInt8}, ... )Найти все числовые столбцы:
>>> df.select(cs.numeric()) shape: (2, 3) ┌─────┬─────┬─────┐ │ bar ┆ baz ┆ zap │ │ --- ┆ --- ┆ --- │ │ i16 ┆ f32 ┆ u8 │ ╞═════╪═════╪═════╡ │ 123 ┆ 2.0 ┆ 0 │ │ 456 ┆ 5.5 ┆ 0 │ └─────┴─────┴─────┘
Найти все столбцы, кроме числовых:
>>> df.select(~cs.numeric()) shape: (2, 1) ┌─────┐ │ foo │ │ --- │ │ str │ ╞═════╡ │ x │ │ y │ └─────┘
-
polars.selectors.numeric() → Selector
-
Выбрать все столбцы со знаковыми целыми числами.
См. также
-
by_dtype -
Выбрать столбцы по типу данных.
-
float -
Выбрать все столбцы с плавающей точкой.
-
integer -
Выбрать все целочисленные столбцы.
-
numeric -
Выбрать все числовые столбцы.
-
unsigned_integer -
Выбрать все столбцы с беззнаковыми целыми числами.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [-123, -456], ... "bar": [3456, 6789], ... "baz": [7654, 4321], ... "zap": ["ab", "cd"], ... }, ... schema_overrides={"bar": pl.UInt32, "baz": pl.UInt64}, ... )Выбрать все столбцы со знаковыми целыми числами:
>>> df.select(cs.signed_integer()) shape: (2, 1) ┌──────┐ │ foo │ │ --- │ │ i64 │ ╞══════╡ │ -123 │ │ -456 │ └──────┘
>>> df.select(~cs.signed_integer()) shape: (2, 3) ┌──────┬──────┬─────┐ │ bar ┆ baz ┆ zap │ │ --- ┆ --- ┆ --- │ │ u32 ┆ u64 ┆ str │ ╞══════╪══════╪═════╡ │ 3456 ┆ 7654 ┆ ab │ │ 6789 ┆ 4321 ┆ cd │ └──────┴──────┴─────┘
Выбрать все целочисленные столбцы (со знаковыми и беззнаковыми числами):
>>> df.select(cs.integer()) shape: (2, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ baz │ │ --- ┆ --- ┆ --- │ │ i64 ┆ u32 ┆ u64 │ ╞══════╪══════╪══════╡ │ -123 ┆ 3456 ┆ 7654 │ │ -456 ┆ 6789 ┆ 4321 │ └──────┴──────┴──────┘
-
polars.selectors.signed_integer() → Selector
-
Выбрать столбцы, названия которых начинаются с заданной подстроки или подстрок.
- Параметры:
-
- prefix
-
Подстрока или подстроки, с которых должны начинаться названия выбираемых столбцов.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [1.0, 2.0], ... "bar": [3.0, 4.0], ... "baz": [5, 6], ... "zap": [7, 8], ... } ... )Найти столбцы, названия которых начинаются с «b»:
>>> df.select(cs.starts_with("b")) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ f64 ┆ i64 │ ╞═════╪═════╡ │ 3.0 ┆ 5 │ │ 4.0 ┆ 6 │ └─────┴─────┘Найти столбцы, названия которых начинаются либо с буквы «b», либо с «z»:
>>> df.select(cs.starts_with("b", "z")) shape: (2, 3) ┌─────┬─────┬─────┐ │ bar ┆ baz ┆ zap │ │ --- ┆ --- ┆ --- │ │ f64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ 3.0 ┆ 5 ┆ 7 │ │ 4.0 ┆ 6 ┆ 8 │ └─────┴─────┴─────┘Найти все столбцы, кроме тех, названия которых начинаются с «b»:
>>> df.select(~cs.starts_with("b")) shape: (2, 2) ┌─────┬─────┐ │ foo ┆ zap │ │ --- ┆ --- │ │ f64 ┆ i64 │ ╞═════╪═════╡ │ 1.0 ┆ 7 │ │ 2.0 ┆ 8 │ └─────┴─────┘
polars.selectors.starts_with(
*prefix: str,
) → Selector -
Выбрать все строковые столбцы типа String (и, при необходимости, Categorical).
См. также
-
binary -
Выбрать все двоичные столбцы.
-
by_dtype -
Выбрать все столбцы, соответствующие заданному типу или типам данных.
-
categorical -
Выбрать все категориальные столбцы.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "w": ["xx", "yy", "xx", "yy", "xx"], ... "x": [1, 2, 1, 4, -2], ... "y": [3.0, 4.5, 1.0, 2.5, -2.0], ... "z": ["a", "b", "a", "b", "b"], ... }, ... ).with_columns( ... z=pl.col("z").cast(pl.Categorical()), ... )Сгруппировать по всем строковым столбцам, просуммировать числовые столбцы, затем отсортировать по строковым столбцам:
>>> df.group_by(cs.string()).agg(cs.numeric().sum()).sort(by=cs.string()) shape: (2, 3) ┌─────┬─────┬─────┐ │ w ┆ x ┆ y │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ f64 │ ╞═════╪═════╪═════╡ │ xx ┆ 0 ┆ 2.0 │ │ yy ┆ 6 ┆ 7.0 │ └─────┴─────┴─────┘
Сгруппировать по всем строковым и категориальным столбцам:
>>> df.group_by(cs.string(include_categorical=True)).agg(cs.numeric().sum()).sort( ... by=cs.string(include_categorical=True) ... ) shape: (3, 4) ┌─────┬─────┬─────┬──────┐ │ w ┆ z ┆ x ┆ y │ │ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ cat ┆ i64 ┆ f64 │ ╞═════╪═════╪═════╪══════╡ │ xx ┆ a ┆ 2 ┆ 4.0 │ │ xx ┆ b ┆ -2 ┆ -2.0 │ │ yy ┆ b ┆ 6 ┆ 7.0 │ └─────┴─────┴─────┴──────┘
-
polars.selectors.string(
*,
include_categorical: bool = False,
) → Selector -
Выбрать все столбцы-структуры.
Предупреждение
Эта функциональность считается нестабильной. Она может быть изменена в любой момент, и это не будет считаться нарушением обратной совместимости.
См. также
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [{"a": "xx", "b": "z"}, {"a": "x", "b": "y"}], ... "bar": [123, 456], ... "baz": [2.0, 5.5], ... }, ... )Выбрать все столбцы-структуры:
>>> df.select(cs.struct()) shape: (2, 1) ┌────────────┐ │ foo │ │ --- │ │ struct[2] │ ╞════════════╡ │ {"xx","z"} │ │ {"x","y"} │ └────────────┘Выбрать все столбцы, кроме столбцов-структур:
>>> df.select(~cs.struct()) shape: (2, 2) ┌─────┬─────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ i64 ┆ f64 │ ╞═════╪═════╡ │ 123 ┆ 2.0 │ │ 456 ┆ 5.5 │ └─────┴─────┘
polars.selectors.struct() → Selector
-
Выбрать все столбцы с временными данными.
См. также
-
by_dtype -
Выбрать все столбцы, соответствующие заданному типу или типам данных.
-
date -
Выбрать все столбцы с датами.
-
datetime -
Выбрать все столбцы с датой и временем, при необходимости фильтруя по единице времени или часовому поясу.
-
duration -
Выбрать все столбцы с длительностью, при необходимости фильтруя по единице времени.
-
time -
Выбрать все столбцы со временем.
Примеры
>>> from datetime import date, time >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dt": [date(2021, 1, 1), date(2021, 1, 2)], ... "tm": [time(12, 0, 0), time(20, 30, 45)], ... "value": [1.2345, 2.3456], ... } ... )Найти все столбцы с временными данными:
>>> df.select(cs.temporal()) shape: (2, 2) ┌────────────┬──────────┐ │ dt ┆ tm │ │ --- ┆ --- │ │ date ┆ time │ ╞════════════╪══════════╡ │ 2021-01-01 ┆ 12:00:00 │ │ 2021-01-02 ┆ 20:30:45 │ └────────────┴──────────┘
Найти все столбцы с временными данными, кроме столбцов со временем:
>>> df.select(cs.temporal() - cs.time()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 2021-01-01 │ │ 2021-01-02 │ └────────────┘
Найти все столбцы, кроме столбцов с временными данными:
>>> df.select(~cs.temporal()) shape: (2, 1) ┌────────┐ │ value │ │ --- │ │ f64 │ ╞════════╡ │ 1.2345 │ │ 2.3456 │ └────────┘
-
polars.selectors.temporal() → Selector
-
Выбрать все столбцы со временем.
См. также
Примеры
>>> from datetime import date, datetime, time >>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "dtm": [datetime(2001, 5, 7, 10, 25), datetime(2031, 12, 31, 0, 30)], ... "dt": [date(1999, 12, 31), date(2024, 8, 9)], ... "tm": [time(0, 0, 0), time(23, 59, 59)], ... }, ... )Выбрать все столбцы со временем:
>>> df.select(cs.time()) shape: (2, 1) ┌──────────┐ │ tm │ │ --- │ │ time │ ╞══════════╡ │ 00:00:00 │ │ 23:59:59 │ └──────────┘
Выбрать все столбцы, кроме столбцов со временем:
>>> df.select(~cs.time()) shape: (2, 2) ┌─────────────────────┬────────────┐ │ dtm ┆ dt │ │ --- ┆ --- │ │ datetime[μs] ┆ date │ ╞═════════════════════╪════════════╡ │ 2001-05-07 10:25:00 ┆ 1999-12-31 │ │ 2031-12-31 00:30:00 ┆ 2024-08-09 │ └─────────────────────┴────────────┘
polars.selectors.time() → Selector
-
Выбрать все столбцы с беззнаковыми целыми числами.
См. также
-
by_dtype -
Выбрать столбцы по типу данных.
-
float -
Выбрать все столбцы с плавающей точкой.
-
integer -
Выбрать все целочисленные столбцы.
-
numeric -
Выбрать все числовые столбцы.
-
signed_integer -
Выбрать все столбцы со знаковыми целыми числами.
Примеры
>>> import polars.selectors as cs >>> df = pl.DataFrame( ... { ... "foo": [-123, -456], ... "bar": [3456, 6789], ... "baz": [7654, 4321], ... "zap": ["ab", "cd"], ... }, ... schema_overrides={"bar": pl.UInt32, "baz": pl.UInt64}, ... )Выбрать все столбцы с беззнаковыми целыми числами:
>>> df.select(cs.unsigned_integer()) shape: (2, 2) ┌──────┬──────┐ │ bar ┆ baz │ │ --- ┆ --- │ │ u32 ┆ u64 │ ╞══════╪══════╡ │ 3456 ┆ 7654 │ │ 6789 ┆ 4321 │ └──────┴──────┘
Выбрать все столбцы, кроме столбцов с беззнаковыми целыми числами:
>>> df.select(~cs.unsigned_integer()) shape: (2, 2) ┌──────┬─────┐ │ foo ┆ zap │ │ --- ┆ --- │ │ i64 ┆ str │ ╞══════╪═════╡ │ -123 ┆ ab │ │ -456 ┆ cd │ └──────┴─────┘
Выбрать все целочисленные столбцы (со знаковыми и беззнаковыми числами):
>>> df.select(cs.integer()) shape: (2, 3) ┌──────┬──────┬──────┐ │ foo ┆ bar ┆ baz │ │ --- ┆ --- ┆ --- │ │ i64 ┆ u32 ┆ u64 │ ╞══════╪══════╪══════╡ │ -123 ┆ 3456 ┆ 7654 │ │ -456 ┆ 6789 ┆ 4321 │ └──────┴──────┴──────┘
-
polars.selectors.unsigned_integer() → Selector
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/selectors.html