跳到内容

版本 0.19

重大变更

聚合函数不再支持水平计算

这会影响 `sum`、`min` 和 `max` 等聚合函数。这些函数曾被重载以支持垂直和水平计算。最近,发布了专门用于水平计算的新功能,并且水平计算已被弃用。

通过使用水平变体(例如 `sum_horizontal`)来恢复旧行为。

示例

之前

>>> df = pl.DataFrame({'a': [1, 2], 'b': [11, 12]})
>>> df.select(pl.sum('a', 'b'))  # horizontal computation
shape: (2, 1)
┌─────┐
│ sum │
│ --- │
│ i64 │
╞═════╡
│ 12  │
│ 14  │
└─────┘

之后

>>> df = pl.DataFrame({'a': [1, 2], 'b': [11, 12]})
>>> df.select(pl.sum('a', 'b'))  # vertical computation
shape: (1, 2)
┌─────┬─────┐
│ a    b   │
│ ---  --- │
│ i64  i64 │
╞═════╪═════╡
│ 3    23  │
└─────┴─────┘

对 `all` / `any` 的更新

`all` 现在默认会忽略空值,而不是将它们视为 `False`。

对于 `any` 和 `all`,`drop_nulls` 参数已重命名为 `ignore_nulls`,并且现在仅支持关键字参数。同时修复了一个问题,即在某些情况下将此参数设置为 `False` 会错误地导致 `None` 输出。

要恢复旧行为,请将 `ignore_nulls` 设置为 `False` 并检查 `None` 输出。

示例

之前

>>> pl.Series([True, None]).all()
False

之后

>>> pl.Series([True, None]).all()
True

改进了许多方法的错误类型

改进我们的错误消息是一项持续的努力。我们对 Python 代码库进行了全面检查,并对错误消息和错误类型进行了许多改进。最值得注意的是,许多 `ValueError` 更改为 `TypeError`。

如果您的代码依赖于处理 Polars 异常,您可能需要进行一些调整。

示例

之前

>>> pl.Series(values=15)
...
ValueError: Series constructor called with unsupported type; got 'int'

之后

>>> pl.Series(values=15)
...
TypeError: Series constructor called with unsupported type 'int' for the `values` parameter

表达式输入解析的更新

`select` 和 `with_columns` 等方法接受一个或多个表达式。但它们也接受字符串、整数、列表以及我们尝试解释为表达式的其他输入。我们更新了内部逻辑,以便更一致地解析输入。

示例

之前

>>> pl.DataFrame({'a': [1, 2]}).with_columns(None)
shape: (2, 1)
┌─────┐
│ a   │
│ --- │
│ i64 │
╞═════╡
│ 1   │
│ 2   │
└─────┘

之后

>>> pl.DataFrame({'a': [1, 2]}).with_columns(None)
shape: (2, 2)
┌─────┬─────────┐
│ a    literal │
│ ---  ---     │
│ i64  null    │
╞═════╪═════════╡
│ 1    null    │
│ 2    null    │
└─────┴─────────┘

`shuffle` / `sample` 现在使用内部 Polars 种子

如果您曾使用 Python 内置的 `random.seed` 函数来控制 Polars 表达式的随机性,这现在将不再起作用。请改用新的 `set_random_seed` 函数。

示例

之前

import random

random.seed(1)

之后

import polars as pl

pl.set_random_seed(1)

弃用

创建一致且直观的 API 很难;为每个函数、方法和参数找到正确的名称可能是最难的部分。新版本附带了多项命名更改,在升级到 `0.19` 时,您很可能会遇到弃用警告。

如果您想立即升级而无需担心弃用警告,可以将以下代码片段添加到您的代码中

import warnings

warnings.filterwarnings("ignore", category=DeprecationWarning)

`groupby` 重命名为 `group_by`

这不是我们轻率做出的更改,因为它将影响几乎所有用户。但“group by”实际上是两个不同的词,我们的命名策略规定它们应该用下划线分隔。

很可能,一个简单的查找和替换就足以完成此更新

  • 搜索: `.groupby(`
  • 替换: `.group_by(`

`apply` 重命名为 `map_*`

`apply` 可能是我们 API 中最常被误用的部分。许多 Polars 用户来自 pandas,其中 `apply` 具有完全不同的含义。

我们现在将所有用户定义函数的功能整合到 `map` 名称下。这导致了以下重命名:

之前 之后
Series/Expr.apply map_elements
Series/Expr.rolling_apply rolling_map
DataFrame.apply map_rows
GroupBy.apply map_groups
apply map_groups
map map_batches