返回

嵌套 Polars 列表中删除特定元素的优化妙招

python

在嵌套 Polars 列表中删除指定元素的优化方法

问题陈述

在处理嵌套列表时,删除特定元素是常见任务。在 Polars 中,可以使用 map_elements 函数逐个元素地执行此操作,但它相对较慢。本文探讨一种更快的解决方案,使用 list.eval 方法,避免使用 map_elements

解决方案:list.eval

list.eval 允许你使用 Python 代码对列表中的每个元素进行操作。要删除包含指定元素(例如 "remove")的列表元素,可以使用以下代码:

(pl.Series(['abc_remove_def', 'remove_abc_def', 'abc_def_remove']).str.split('_')
   .list.eval('list(filter(lambda x: "remove" not in x, list_))')
   .list.join('_')
)

代码示例

import polars as pl

data = pl.Series(['abc_remove_def', 'remove_abc_def', 'abc_def_remove'])

result = (data.str.split('_')
    .list.eval('list(filter(lambda x: "remove" not in x, list_))')
    .list.join('_')
)

print(result)

优点

使用 list.eval 的方法具有以下优点:

  • 性能提升: list.eval 并行处理列表元素,比 map_elements 更快。
  • 复杂转换: 它允许你使用 Python 代码进行更复杂的列表转换。

限制

list.eval 仅适用于 Polars 1.0.0 及更高版本。在较早版本中,需要使用 map_elements

结论

通过使用 list.eval,你可以更有效地从嵌套的 Polars 列表中删除元素。这对于处理大数据集和执行复杂列表转换非常有帮助。

常见问题解答

  1. list.eval 的语法是什么?

    list.eval('Python 表达式', memory_budget=None, extra_kwargs=None)

  2. list.eval 接受哪些类型的 Python 表达式?

    它接受任何有效的 Python 表达式,返回一个列表。

  3. 我可以在 list.eval 中使用哪些 Python 库?

    你可以使用 Python 标准库,但任何外部库都必须通过 extra_kwargs 参数导入。

  4. 如何将 list.eval 与其他 Polars 操作组合使用?

    list.eval 可以与其他 Polars 操作组合使用,例如 str.split()list.join()

  5. list.eval 的性能优势有多大?

    性能优势取决于数据集的大小和复杂性,但通常情况下,list.evalmap_elements 快几个数量级。