6.6K Star!比 Pandas 快很多的数据处理库

Polars 是一个使用 Apache Arrow 列格式作为内存模型,用Rust实现的,在Rust, Python以及Node.js中均可使用的速度极快的数据帧库。

它有以下几个特点:

  • 懒|立即执行
  • 多线程
  • SIMD
  • 查询优化
  • 强大的表达式API
  • 支持多种语言:Rust、Python 等

了解更多内容可以点击这个 用户指南 。

Python代码示例

>>>df=pl.DataFrame(
... {
..."A": [1, 2, 3, 4, 5],
..."fruits": ["banana", "banana", "apple", "apple", "banana"],
..."B": [5, 4, 3, 2, 1],
..."cars": ["beetle", "audi", "beetle", "beetle", "beetle"],
... }
... )

# embarrassinglyparallelexecution
# veryexpressivequerylanguage
>>> (
...df
... .sort("fruits")
... .select(
... [
..."fruits",
..."cars",
...pl.lit("fruits").alias("literal_string_fruits"),
...pl.col("B").filter(pl.col("cars") =="beetle").sum(),
...pl.col("A").filter(pl.col("B") >2).sum().over("cars").alias("sum_A_by_cars"), # groupsby"cars"
...pl.col("A").sum().over("fruits").alias("sum_A_by_fruits"), # groupsby"fruits"
...pl.col("A").reverse().over("fruits").alias("rev_A_by_fruits"), # groupsby"fruits
...pl.col("A").sort_by("B").over("fruits").alias("sort_A_by_B_by_fruits"), # groupsby"fruits"
... ]
... )
... )
shape: (5, 8)
┌──────────┬──────────┬──────────────┬─────┬─────────────┬─────────────┬─────────────┬─────────────┐
fruitscarsliteral_striBsum_A_by_casum_A_by_frrev_A_by_frsort_A_by_B
------ng_fruits---rsuitsuits_by_fruits
strstr---i64------------
stri64i64i64i64
╞══════════╪══════════╪══════════════╪═════╪═════════════╪═════════════╪═════════════╪═════════════╡
"apple""beetle""fruits"114744
├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
"apple""beetle""fruits"114733
├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
"banana""beetle""fruits"114855
├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
"banana""audi""fruits"112822
├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
"banana""beetle""fruits"114811
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘

性能

Polars速度非常快,事实上,它是目前性能最好的解决方案之一。具体可参见 h2oai’s db基准测试结果 。

此处我们自己用一些示例代码来对比python中pandas和polars处理数据的速度差距。

importpandasaspd
importpolarsaspl
importtimeit

# 读取时间对比
start_df=timeit.default_timer()
df=pd.read_csv("/Users/lenskit/Desktop/aa.csv")
df=df.sort_values("company_name", ascending=False).head()
stop_df=timeit.default_timer()
print('time: ', stop_df-start_df)

start_pl=timeit.default_timer()
data=pl.read_csv("/Users/lenskit/Desktop/aa.csv")
data.sort(by="company_name", reverse=True).head()
stop_pl=timeit.default_timer()
print('time1: ', stop_pl-start_pl)

# 纵向拼接时间对比
start_df1=timeit.default_timer()
df_1=pd.read_csv('/Users/lenskit/Desktop/aa.csv')
df_2=pd.read_csv('/Users/lenskit/Desktop/bb.csv')
df_1.append(df_2, ignore_index=True)
stop_df1=timeit.default_timer()
print('time2: ', stop_df1-start_df1)

start_pl1=timeit.default_timer()
pl_1=pl.read_csv('/Users/lenskit/Desktop/aa.csv')
pl_2=pl.read_csv('/Users/lenskit/Desktop/bb.csv')
pl_1.vstack(pl_2)
stop_pl1=timeit.default_timer()
print('time3: ', stop_pl1-start_pl1)


time: 5.088931238
time1: 0.8967700230000002
time2: 4.707102063
time3: 0.639797883

可以看到在读取文件上,polars比pandas速度快了5倍多,在数据纵向拼接上,polars比pandas快了有7倍多。

Python安装

用如下语句安装最新的polars版本:

$pip3install-Upolars[pyarrow]

目前polars的更新频率很高(每周/每隔几天),所以最好定期更新一下polars来获得最新的错误修复/功能。

Rust安装

您可以从 http:// crates.io 获取最新版本,或者如果你想使用最新的功能/性能改进,可以用如下命令指向版本的master分支。

polars= { git="https://github.com/pola-rs/polars", rev="<optional git tag>" }

注意需要Rust version >=1.58

文档

想知道Polars支持的所有功能吗?阅读文档!

Python

  • 安装指南:$ pip3 install polars
  • Python文档https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars/py-polars/html/reference/index.html
  • 用户指南https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars-book/user-guide/index.html

Rust

  • Rust文件(主分支)https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars/polars/index.html
  • 用户指南https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars-book/user-guide/index.html

Node

  • 安装指南:yarn install nodejs-polars
  • Node文档https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars/nodejs-polars/html/index.html
  • 用户指南https://link.zhihu.com/?target=https%3A//pola-rs.github.io/polars-book/user-guide/index.html

[Python]: 从源代码编译polars

如果你想要获取最前沿的版本或最大的性能,你应该从源代码编译Polar。

这可以通过按顺序执行以下步骤来完成:

  • 1、安装最新的 Rust编译器
  • 2、安装 maturin​ :$ pip3 install maturin
  • 3、选择以下任一:
  • 最快的二进制文件,非常长的编译时间:
  • $ cd py-polars && maturin develop –rustc-extra-args=”-C target-cpu=native” –release
  • 较快的二进制文件,短一些的编译时间:
  • $ cd py-polars && maturin develop –rustc-extra-args=”-C codegen-units=16 -C lto=

需要注意的是,Python实现的Rust crate被称为 py-polars ,以区别于Rust crate包 polars 本身。然而,Python包和Python模块都被命名为 polars ,所以你可以 pip install polars 和 import polars 。

Arrow2

Polars已经转移到 arrow2 。Arrow2是 Apache Arrow Columnar Format 更快、更安全的实现。Arrow2还具有更细粒度的代码库,有助于减少编译器膨胀。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/277737.html<

(0)
管理的头像管理
上一篇2025-05-11 06:28
下一篇 2025-05-11 06:30

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注