版本 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 |