嵌套 Polars 列表中删除特定元素的优化妙招
2024-03-31 15:45:37
在嵌套 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 列表中删除元素。这对于处理大数据集和执行复杂列表转换非常有帮助。
常见问题解答
-
list.eval
的语法是什么?list.eval('Python 表达式', memory_budget=None, extra_kwargs=None)
-
list.eval
接受哪些类型的 Python 表达式?它接受任何有效的 Python 表达式,返回一个列表。
-
我可以在
list.eval
中使用哪些 Python 库?你可以使用 Python 标准库,但任何外部库都必须通过
extra_kwargs
参数导入。 -
如何将
list.eval
与其他 Polars 操作组合使用?list.eval
可以与其他 Polars 操作组合使用,例如str.split()
和list.join()
。 -
list.eval
的性能优势有多大?性能优势取决于数据集的大小和复杂性,但通常情况下,
list.eval
比map_elements
快几个数量级。