try 从极点数据帧访问数据时,使用方括号[ ]和使用Expression APIs(如selectfilter等)有什么不同?什么时候用哪一种?

A极地数据帧

df = pl.DataFrame(
    {
        "a": ["a", "b", "a", "b", "b", "c"],
        "b": [2, 1, 1, 3, 2, 1],
    }
)

推荐答案

通常,建议使用Polars Expression API,因为大多数方法都是Polars lazy API的一部分.API将许多操作(如 Select 、过滤和Mutations )的求值推迟到实际需要结果时才进行.这使得query optimizations可以让极点变得如此高效.

相比之下,使用方括号表示法访问列仅在Eager 模式下有效.

举例说明.

作为一个具体的例子,考虑读取一个相当大的.csv文件(~700mb)的第一个元素.我们首先创建.csv文件并将其写入磁盘.

import polars as pl

pl.DataFrame({"col": [0] * 100_000_000}).write_csv("df.csv")

Using square bracket notation (100).

由于方括号表示法在LazyFrames上不起作用,我们需要使用pl.read_parquet将文件读入DataFrame对象.

pl.read_csv("df.csv")["col"][0]

在我的机器上,这大约需要200毫秒.

Using polars lazy API.

使用Polar Lazy API(pl.scan_csvselectfirstitem)也可以实现同样的目的.

pl.scan_csv("df.csv").select("col").first().collect().item()

计算的延迟允许POLAR避免读取整个文件,并且在我的机器上执行仅占用300μS,即we obtained a ~650x speed-up by using polars' lazy API.

当然,人们可能会争辩说,通过避免读取整个.csv文件而不是使用select而不是[,可以节省大量时间.但是,请注意,这仍然是due to the benefits of the lazy API.

Python相关问答推荐

根据另一列中的nan重置值后重新加权Pandas列

如何避免Chained when/then分配中的Mypy不兼容类型警告?

运输问题分支定界法&

NumPy中条件嵌套for循环的向量化

如何在Polars中从列表中的所有 struct 中 Select 字段?

在pandas中使用group_by,但有条件

使用Python从URL下载Excel文件

让函数调用方程

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

人口全部乱序 - Python—Matplotlib—映射

将一个双框爆炸到另一个双框的范围内

如何在Python中将超链接添加到PDF中每个页面的顶部?

如何使用大量常量优化代码?

Django在一个不是ForeignKey的字段上加入'

比较两个有条件的数据帧并删除所有不合格的数据帧

查找查找表中存在的列值组合

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?

如何在基于时间的数据帧中添加计算值

来自任务调度程序的作为系统的Python文件

在Django REST框架中定义的URL获得404分