Skip to content

版本 0.19

重大变更

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

这影响了像summinmax这样的聚合函数。这些函数被重载以支持垂直和水平计算。最近,发布了新的专门用于水平计算的功能,并且水平计算已被弃用。

通过使用水平变体恢复旧行为,例如 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

对于anyalldrop_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

表达式输入解析的更新

selectwith_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,在 pandas 中 apply 有着完全不同的含义。

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

Before After
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