选择器#
选择器允许更直观地从DataFrame或LazyFrame对象中根据名称、数据类型或其他属性选择列。它们统一并建立在通过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(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,
}
注意
如果您不想在选择器上使用集合操作,可以通过调用as_expr将它们具体化为expressions。这确保了操作OR, AND, etc被分派到底层表达式。
函数#
可用的选择器函数:
|
选择所有列。 |
|
选择所有列名仅包含字母的列(例如:仅包含字母)。 |
|
选择所有具有字母数字名称的列(例如:仅包含字母和数字0-9)。 |
|
选择所有二进制列。 |
|
选择所有布尔列。 |
|
选择所有匹配给定数据类型的列。 |
|
选择所有与给定索引(或范围对象)匹配的列。 |
|
选择所有与给定名称匹配的列。 |
选择所有分类列。 |
|
|
选择名称包含给定字面量子字符串的列。 |
|
选择所有日期列。 |
|
选择所有日期时间列,可选择按时间单位/时区进行过滤。 |
|
选择所有十进制列。 |
|
选择所有列名仅由数字组成的列。 |
|
选择所有持续时间列,可选择按时间单位进行过滤。 |
|
选择以给定子字符串结尾的列。 |
|
选择除与给定列、数据类型或选择器匹配的所有列。 |
|
扩展选择器到列名,针对特定的框架或目标模式。 |
|
选择当前范围内的第一列。 |
|
选择所有浮点数列。 |
|
选择所有整数列。 |
|
指示给定的对象/表达式是否是一个选择器。 |
|
选择当前范围内的最后一列。 |
|
选择所有匹配给定正则表达式模式的列。 |
|
选择所有数值列。 |
选择所有有符号整数列。 |
|
|
选择以给定子字符串开头的列。 |
|
选择所有字符串(以及可选的分类)字符串列。 |
|
选择所有时间列。 |
|
选择所有时间列。 |
选择所有无符号整数列。 |
- polars.selectors.all() SelectorType[source]#
选择所有列。
示例
>>> 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.alpha(ascii_only: bool = False, *, ignore_spaces: bool = False) SelectorType[source]#
选择所有列名仅包含字母的列(例如:仅包含字母)。
- Parameters:
- 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.alphanumeric(ascii_only: bool = False, *, ignore_spaces: bool = False) SelectorType[source]#
选择所有具有字母数字名称的列(例如:仅包含字母和数字0-9)。
- Parameters:
- 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.binary() SelectorType[source]#
选择所有二进制列。
示例
>>> 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.boolean() SelectorType[source]#
选择所有布尔列。
另请参阅
by_dtype选择所有匹配给定数据类型(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.by_dtype(
- *dtypes: PolarsDataType | PythonDataType | Iterable[PolarsDataType] | Iterable[PythonDataType],
选择所有匹配给定数据类型的列。
示例
>>> 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"], ... } ... )
选择所有具有日期或字符串类型的列:
>>> 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 │ └────────────┴───────┘
选择所有不是日期或字符串类型的列:
>>> 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_index(*indices: int | range | Sequence[int | range]) SelectorType[source]#
选择所有与给定索引(或范围对象)匹配的列。
- Parameters:
- *indices
一个或多个列索引(或范围对象)。 支持负索引。
注释
匹配的列按照它们在选择器中出现的索引顺序返回,而不是底层模式的顺序。
示例
>>> 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))) 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_name(*names: str | Collection[str], require_all: bool = True) SelectorType[source]#
选择所有与给定名称匹配的列。
在版本0.20.27中添加:添加了
require_all参数。- Parameters:
- *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) ┌─────┬─────┐ │ foo ┆ baz │ │ --- ┆ --- │ │ str ┆ f64 │ ╞═════╪═════╡ │ x ┆ 2.0 │ │ y ┆ 5.5 │ └─────┴─────┘
匹配所有列除了给定的列:
>>> df.select(~cs.by_name("foo", "bar")) shape: (2, 2) ┌─────┬───────┐ │ baz ┆ zap │ │ --- ┆ --- │ │ f64 ┆ bool │ ╞═════╪═══════╡ │ 2.0 ┆ false │ │ 5.5 ┆ true │ └─────┴───────┘
- polars.selectors.categorical() SelectorType[source]#
选择所有分类列。
示例
>>> 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.contains(*substring: str) SelectorType[source]#
选择名称包含给定字面量子字符串的列。
- Parameters:
- 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.date() SelectorType[source]#
选择所有日期列。
另请参阅
示例
>>> 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.date()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 1999-12-31 │ │ 2024-08-09 │ └────────────┘
选择所有列除了那些是日期的列:
>>> 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.datetime(
- time_unit: TimeUnit | Collection[TimeUnit] | None = None,
- time_zone: str | timezone | Collection[str | timezone | None] | None = ('*', None),
选择所有日期时间列,可选择按时间单位/时区进行过滤。
- Parameters:
- time_unit
一个(或多个)允许的时间单位精度字符串,“ms”,“us”和“ns”。 省略以选择具有任何有效时间单位的列。
- time_zone
一个或多个时区字符串,如zoneinfo中所定义(要查看有效选项,请运行
import zoneinfo; zoneinfo.available_timezones()以获取完整列表)。将
None设置为选择没有时区的Datetime列。设置“*”以选择具有任何时区的日期时间列。
示例
>>> 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"), ... }, ... )
选择所有日期时间列:
>>> 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 │ └────────────────────────────────┴─────────────────────────────┴─────────────────────────┘
选择所有具有‘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 │ └─────────────────────────────┴─────────────────────────┘
选择所有具有任何时区的日期时间列:
>>> 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 │ └────────────────────────────────┴─────────────────────────────┘
选择所有具有特定时区的日期时间列:
>>> 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 │ └─────────────────────────────┘
选择所有没有时区的日期时间列:
>>> 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 │ └─────────────────────────┘
选择所有列除了日期时间列:
>>> df.select(~cs.datetime()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 1999-12-31 │ │ 2010-07-05 │ └────────────┘
- polars.selectors.decimal() SelectorType[source]#
选择所有十进制列。
示例
>>> 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[*,0] ┆ decimal[10,5] │ ╞══════════════╪═══════════════╡ │ 123 ┆ 2.00050 │ │ 456 ┆ -50.55550 │ └──────────────┴───────────────┘
选择所有列除了小数类型的列:
>>> df.select(~cs.decimal()) shape: (2, 1) ┌─────┐ │ foo │ │ --- │ │ str │ ╞═════╡ │ x │ │ y │ └─────┘
- polars.selectors.digit(ascii_only: bool = False) SelectorType[source]#
选择所有列名仅由数字组成的列。
注释
匹配的列名不能包含任何非数字字符。请注意,“数字”的定义默认包括所有有效的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.duration(time_unit: TimeUnit | Collection[TimeUnit] | None = None) SelectorType[source]#
选择所有持续时间列,可选择按时间单位进行过滤。
- Parameters:
- 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"), ... }, ... )
选择所有持续时间列:
>>> 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 │ └────────────────┴─────────────────┴────────────────────┘
选择所有具有‘ms’精度的持续时间列:
>>> df.select(cs.duration("ms")) shape: (2, 1) ┌────────────────┐ │ td1 │ │ --- │ │ duration[ms] │ ╞════════════════╡ │ 1d 2m 3s 456ms │ │ 1d 23h 987ms │ └────────────────┘
选择所有具有‘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 │ └────────────────┴────────────────────┘
选择所有列除了持续时间列:
>>> df.select(~cs.duration()) shape: (2, 1) ┌────────────┐ │ dt │ │ --- │ │ date │ ╞════════════╡ │ 2022-01-31 │ │ 2025-07-05 │ └────────────┘
- polars.selectors.ends_with(*suffix: str) SelectorType[source]#
选择以给定子字符串结尾的列。
- Parameters:
- 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.exclude(
- columns: str | PolarsDataType | SelectorType | Expr | Collection[str | PolarsDataType | SelectorType | Expr],
- *more_columns: str | PolarsDataType | SelectorType | Expr,
选择除与给定列、数据类型或选择器匹配的所有列。
- Parameters:
- columns
一个或多个列(col 或 name)、数据类型、列或选择器,表示要排除的列。
- *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.expand_selector(
- target: DataFrame | LazyFrame | Mapping[str, PolarsDataType],
- selector: SelectorType | Expr,
- *,
- strict: bool = True,
扩展选择器到列名,针对特定的框架或目标模式。
在版本0.20.30中添加:添加了
strict参数。- Parameters:
- target
一个polars的DataFrame、LazyFrame或schema。
- 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 = { ... "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.first() SelectorType[source]#
选择当前范围内的第一列。
示例
>>> 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.float() SelectorType[source]#
选择所有浮点数列。
另请参阅
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.integer() SelectorType[source]#
选择所有整数列。
另请参阅
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.is_selector(obj: Any) bool[source]#
指示给定的对象/表达式是否是一个选择器。
示例
>>> 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.last() SelectorType[source]#
选择当前范围内的最后一列。
示例
>>> 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.matches(pattern: str) SelectorType[source]#
选择所有匹配给定正则表达式模式的列。
- Parameters:
- pattern
一个有效的正则表达式模式,与regex crate兼容。
另请参阅
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.numeric() SelectorType[source]#
选择所有数值列。
另请参阅
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.signed_integer() SelectorType[source]#
选择所有有符号整数列。
另请参阅
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.starts_with(*prefix: str) SelectorType[source]#
选择以给定子字符串开头的列。
- Parameters:
- 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.string(*, include_categorical: bool = False) SelectorType[source]#
选择所有字符串(以及可选的分类)字符串列。
另请参阅
binary选择所有二进制列。
by_dtype选择所有匹配给定数据类型(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("lexical")), ... )
按所有字符串列分组,对数值列求和,然后按字符串列排序:
>>> 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.temporal() SelectorType[source]#
选择所有时间列。
另请参阅
示例
>>> 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.time() SelectorType[source]#
选择所有时间列。
另请参阅
示例
>>> 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.unsigned_integer() SelectorType[source]#
选择所有无符号整数列。
另请参阅
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 │ └──────┴──────┴──────┘