Polars 是一个速度极快的 DataFrames 库。
它拥有以下特性:
1.多线程
2.强大的表达式API
3.查询优化
下面给大家简单介绍一下这个模块的使用方式。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。
(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南
Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入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"), ]))
效果如下:
他还能使用正则表达式筛选值并进行求和等操作:
# 正则表达式 (df.select([ pl.col("^A|B$").sum() ])) # 或者多选 (df.select([ pl.col(["A", "B"]).sum() ]))
Polars支持下面这样复杂且高效的查询及展示:
>>> 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"), ... 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") ]))
对所有列求和,并放回变量中,起名为 xxx_sum:
(df.select([ pl.all(), pl.all().sum().suffix("_sum") ]))
正则也能用于筛选:
predicate = pl.col("fruits").str.contains("^b.*") (df.select([ predicate ]))
在设定一个新列的时候,甚至可以根据条件来给不同的行设定值:
(df.select([ "fruits", "B", pl.when(pl.col("fruits") == "banana").then(pl.col("B")).otherwise(-1).alias("b") ]))
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
我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。
有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。
原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!
Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典