美文网首页
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

    相关文章

      网友评论

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

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