美文网首页
Polars 速度极快的数据处理第三方模块

Polars 速度极快的数据处理第三方模块

作者: 程序员的隐秘角落 | 来源:发表于2023-03-26 09:08 被阅读0次

Polars 是一个速度极快的 DataFrames 库。

它拥有以下特性:

1.多线程

2.强大的表达式API

3.查询优化

下面给大家简单介绍一下这个模块的使用方式。

1.准备

请选择以下任一种方式输入命令安装依赖
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install polars

2.Polars 使用介绍

在初始化变量的时候,Polars用起来的方式和Pandas没有太大区别,下面我们定义一个初始变量,后面所有示例都使用这个变量:

import polars as pl
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"],
    }
)

选择需要展示的数据:

(df.select([
    pl.col("A"),
    "B", # the col part is inferred
    pl.lit("B"), # we must tell polars we mean the literal "B"
    pl.col("fruits"),
]))

效果如下:

d88818b79e6732a69974d209723d7839.png

他还能使用正则表达式筛选值并进行求和等操作:

# 正则表达式
(df.select([
    pl.col("^A|B$").sum()
]))
# 或者多选
(df.select([
    pl.col(["A", "B"]).sum()
]))

效果如下:

b4ba6399433c7043e8e427d6a33106f1.png

Polars支持下面这样复杂且高效的查询及展示:

...     [
...         "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"),
...         pl.col("A").sum().over("fruits").alias("sum_A_by_fruits"),
...         pl.col("A").reverse().over("fruits").alias("rev_A_by_fruits"),
...         pl.col("A").sort_by("B").over("fruits").alias("sort_A_by_B_by_fruits"),
...     ]
... )
shape: (5, 8)
┌──────────┬──────────┬──────────────┬─────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ fruits ┆ cars ┆ literal_stri ┆ B ┆ sum_A_by_ca ┆ sum_A_by_fr ┆ rev_A_by_fr ┆ sort_A_by_B │
│ --- ┆ --- ┆ ng_fruits ┆ --- ┆ rs ┆ uits ┆ uits ┆ _by_fruits │
│ str ┆ str ┆ --- ┆ i64 ┆ --- ┆ --- ┆ --- ┆ --- │
│ ┆ ┆ str ┆ ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞══════════╪══════════╪══════════════╪═════╪═════════════╪═════════════╪═════════════╪═════════════╡
│ "apple"  ┆ "beetle" ┆ "fruits"     ┆ 11  ┆ 4           ┆ 7           ┆ 4           ┆ 4           │
│ "apple"  ┆ "beetle" ┆ "fruits"     ┆ 11  ┆ 4           ┆ 7           ┆ 3           ┆ 3           │
│ "banana" ┆ "beetle" ┆ "fruits"     ┆ 11  ┆ 4           ┆ 8           ┆ 5           ┆ 5           │
│ "banana" ┆ "audi"   ┆ "fruits"     ┆ 11  ┆ 2           ┆ 8           ┆ 2           ┆ 2           │
│ "banana" ┆ "beetle" ┆ "fruits"     ┆ 11  ┆ 4           ┆ 8           ┆ 1           ┆ 1           │
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘

3.Polars 高级使用

倒序操作,将值倒序后重新放回变量中,起名为xxx_reverse:

(df.select([
    pl.all(),
    pl.all().reverse().suffix("_reverse")
]))
53c10ee8e654336239520744221a7c1a.png

对所有列求和,并放回变量中,起名为 xxx_sum:

(df.select([
    pl.all(),
    pl.all().sum().suffix("_sum")
]))
4ae3ad86a8db486f6366a8d2112d92d0.png

正则也能用于筛选:

predicate = pl.col("fruits").str.contains("^b.*")

(df.select([
    predicate
]))
28e6c82abfdc41546c7fed784d4d98df.png

在设定一个新列的时候,甚至可以根据条件来给不同的行设定值:

(df.select([
    "fruits",
    "B",
    pl.when(pl.col("fruits") == "banana").then(pl.col("B")).otherwise(-1).alias("b")
]))
0c1fd4fc79dfe5ab3ac7ecfecb5f464a.png

fold 函数很强大,它能在列上执行操作,获得最快的速度,也就是矢量化执行:

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

out = df.select(
    pl.fold(acc=pl.lit(0), f=lambda acc, x: acc + x, exprs=pl.col("*")).alias("sum"),
)
print(out)
# shape: (3, 1)
# ┌─────┐
# │ sum │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 11 │
# ├╌╌╌╌╌┤
# │ 22 │
# ├╌╌╌╌╌┤
# │ 33 │
# └─────┘

Polars 还有许多其他有用的特性,大家感兴趣的可以访问他们的用户手册进行阅读和学习:

https://pola-rs.github.io/polars-book/user-guide

相关文章

  • Python3多进程

    由于这两天自己负责的数据处理模块,都涉及到IO密集的数据读写,为了能够加快处理速度和调试速度,就想着使用Pytho...

  • 02-Node 第三方模块

    Node 第三方模块什么是第三方模块获取第三方模块第三方模块 nrm第三方模块 nodemon第三方模块 Gulp...

  • 从Polars字符串长度计算问题排查谈谈开源库踩坑思路

    Polars[https://github.com/pola-rs/polars]是一个使用rust开发的类似于P...

  • Glide 4解析系列(一):如何使用Glide

    Glide,一个快速高效的Android图片加载库,是最常用的一个第三方框架。它不仅带来了极快的图片解码速度而且很...

  • 2018-10-31

    Python 数据处理 1. 导入所需模块或库 导入数据处理pandas、numpy及可视化模块matplotli...

  • 凌迟(145)

    男子用刀以极快的速度刺入体内,神经还未反应过来,刀以再极快的速度从体内抽出,神经才将痛传入大脑,大脑把痛传到伤口。...

  • Rust DataFrame library —— polars

    包的介绍:Polars is a DataFrame library for Rust. It is based ...

  • 模块和包

    模块和包 一、模块的分类 1,第三方模块 工具安装 源码安装 2,自定义模块 3,内置模块 模块除了 第三方模块,...

  • dllPlugin整体流程解析

    为什么我们需要dllPlugin 不希望在开发热更新时重复打包第三方模块,否则速度太慢。 希望在生产环境将第三方模...

  • AFNetwork - Response模块解析

    主题: 网络返回数据处理模块(输入、输出) 概要: 网络结束后的数据处理。 位置:AFURLResponseSer...

网友评论

      本文标题:Polars 速度极快的数据处理第三方模块

      本文链接:https://www.haomeiwen.com/subject/yrjordtx.html