python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python polars数据科学库

python polars数据科学库对比Pandas优势分析

作者:程序员小寒

这篇文章主要为大家介绍了python polars数据科学库对比Pandas优势分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

python polars数据科学库

今天给大家分享一个神奇的 python 库,polars。

https://github.com/pola-rs/polars 

大家都知道,Pandas 是数据科学中重要的 Python 库。但它最大的缺点是对大型数据集的操作可能很慢。

Polars 是一个开源且相对较新的数据分析和处理库,为广泛流行的 Pandas 库提供了替代方案

为什么它比 Pandas 快

根据 Polars 用户指南,其目标是 “利用机器上的所有可用内核,以提供一个闪电般快速的 DataFrame 库。”

与 Polars 相比,Pandas 本身并不跨计算机核心并行处理。而 Polars 是为并行化而设计的。

Polars 有两种不同的 API:急切 API 和惰性 API

急切执行类似于 Pandas。这意味着直接运行代码,并立即返回结果。

延迟执行是在你需要结果之前不会运行。因此它避免了运行不必要的代码,所以延迟执行比急切执行更有效。

对于延迟执行,你必须使用 .lazy() 方法开始操作。然后你就可以为你想做的任何事情编写代码。

最后,你需要运行 .collect() 方法来显示结果。

如下所示

df.lazy() 
  .with_columns([(pl.col("col") * 10).alias("new_col")]) 
  #... 
  .collect()

如果不运行 .collect() 方法,该操作不会立即执行。

安装库

可以直接使用 pip 进行安装。

pip install polars

之后,你可以像导入 Pandas 一样导入 Polars 。

import polars as pl
import pandas as pd

Pandas and Polars 比较

乍一看,Pandas 和 Polars(急切 API)在语法上很相似,因为它们共享主要构建块:Series 和 DataFrame。

此外,Polars 中的许多表达式与 Pandas 表达式类似。

# Example expressions that work both with Pandas and Polars
df.head() # Get the first n rows
df.tail() # Get the last n rows
df.unique() # Get unique values of this expression.

下面,我们来一起探讨一下 Polars 与 Pandas 在语法和执行时间方面的主要区别。主要从以下几个操作来进行比较。

读取数据

在 Polars 中读取 CSV 文件会感觉很熟悉,因为你可以像在 Pandas 中一样使用 .read_csv() 方法:

# Pandas
df_pd=pd.read_csv('example.csv')

# Polars
df_pl.read_csv('example.csv')

分别使用 Pandas 和 Polars 读取示例数据集的执行时间如下所示:

对于我们的示例数据集,使用 Pandas 读取数据所需的时间大约是使用 Polars 的八倍。

选择和过滤数据

Pandas 和 Polars 之间的第一个主要区别是 Polars 不使用索引。

尽管相同的 Pandas 代码可以在 Polars 上运行,但这不是最佳实践。

在 Polars 中,你应该使用 .select() 方法来选择数据。

# Pandas
df_pd[['col1', 'col2']] 

# The above code will run with Polars as well, 
# but the correct way in Polars is:
df_pl.select(['col01', 'col02'])

在 Pandas 和 Polars 中选择数据的执行时间如下所示:

对于我们的示例数据集,使用 Pandas 选择数据所需的时间大约是使用 Polars 的 15 倍。

虽然你可以在 Pandas 中使用 .query() 方法来过滤数据,但你需要在 Polars 中使用 .filter() 方法。

# Pandas
df_pd.query('col01 > 5')

# Polars
df_pl.filter(pl.col('col01') > 5)

在 Pandas 和 Polars 中过滤数据的执行时间如下所示:

对于我们的示例数据集,在 Pandas 和 Polars 中过滤数据所需的时间相似。

与 Pandas 相比,Polars 可以并行运行 .select() 和 .filter() 中的操作。

创建新列

在 Polars 中创建新列的方法也与你在 Pandas 中的习惯不同。

在 Polars 中,你需要使用 .with_column() 或 .with_columns() 方法,具体取决于你要创建的列数。

# Pandas
df_pd["new_col"] = df_pd["col01"] * 10

# Polars
df_pl.with_column((pl.col("col01") * 10).alias("new_col"))

# Polars for multiple columns
# df_pl.with_columns([(pl.col("col01") * 10).alias("new_col"), ...])

在 Pandas 和 Polars 中创建新列的执行时间如下所示:

对于我们的示例数据集,使用 Polars 创建新列所需的时间大约是使用 Pandas 的两倍。

分组和聚合

Pandas 和 Polars 的分组和聚合在语法方面略有不同,但都使用 .groupby() 和 .agg() 方法。

# Pandas
df_pd.groupby('col01').col02.agg('mean')

# Polars
df_pl.groupby('col01').agg([pl.mean('col02')])

在 Pandas 和 Polars 中对数据进行分组和聚合的最终执行时间如下所示。

对于我们的示例数据集,使用 Pandas 聚合数据所需的时间大约是使用 Polars 的两倍。

详细源码可以查看 https://www.kaggle.com/code/iamleonie/pandas-vs-polars 

Polars 相对于 Pandas 的主要优势是速度。

如果你需要对大型数据集进行大量数据处理,那么你绝对应该尝试 Polars。

此外,你可能还发现,对于相同的操作,Polars 代码通常比 Pandas 代码长一些。

以上就是python polars数据科学库对比Pandas优势分析的详细内容,更多关于python polars数据科学库的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文