服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

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

日期: 来源:Python开发者收集编辑:Ckend

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"),
]))

效果如下:

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

# 正则表达式
(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


- EOF -


加主页君微信,不仅Python技能+1

主页君日常还会在个人微信分享Python相关工具资源精选技术文章,不定期分享一些有意思的活动岗位内推以及如何用技术做业余项目

加个微信,打开一扇窗



推荐阅读  点击标题可跳转

1、微软开源 Visual ChatGPT,7天斩获2.2万stars

2、Python 爬虫 requests 库教程(附案例)

3、没有这些,别妄谈做 ChatGPT 了


觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

点赞和在看就是最大的支持❤️

相关阅读

  • 最全程序员副业私活指南

  • 近日,TIOBE榜单(编程语言流行与使用程度排行榜)发布了最新数据,Python依然领先榜单上的老对手Java和C,稳居榜首,成为全球最火的编程语言。Python在网络爬虫方面的巨大优势,吸引着越
  • 【Python教程】运算符

  • 运算符:以1 + 2为例,1和2被称为操作数,“+” 称为运算符。Python语言支持以下类型的运算符:算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符三目运
  • “双一流”博士生,一作发Nature!

  • 点击关注,化学科讯!虽然近年基于超导量子线路系统的量子信息处理领域研究发展迅猛,但由于量子计算机体系的错误率远高于经典数字计算机,想要构建具有实用价值的通用量子计算机,量
  • ChatGPT 插件系统,正式上线!

  • 公众号关注 “GitHubDaily”设为 “星标”,每天带你逛 GitHub!自 ChatGPT 诞生以来,技术圈内有不少开发者基于它的功能实现了不少优秀的产品,现如今在 GitHub 上新增的 ChatGPT
  • Open AI ChatGPT推出插件系统!你做,他们帮推

  • ChatGPT 推出插件系统!!!他们推出了3个插件示例:网页浏览器:将Bing添加到对话中,现在可以访问互联网内容代码解释器:在沙盒和防火墙执行环境中添加一个实时的Python解释器检索:为你

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

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

  • Polars 是一个速度极快的 DataFrames 库。它拥有以下特性:1.多线程2.强大的表达式API3.查询优化下面给大家简单介绍一下这个模块的使用方式。1.准备请选择以下任一种方式输入
  • 迎接夏秋新航季,吉祥航空持续恢复国际航线

  • T记者从吉祥航空获悉,2023年夏秋新航季起,吉祥航空将持续开展航班新增与恢复,在聚焦日韩、东南亚国际航班恢复基础上,新增一批国内热门商旅目的地航线。预计至4月中旬,吉祥航空每
  • SecWiki周刊(第473期)

  • 本期关键字:自动化渗透、破解精华集、接口漏洞、分析Jar包、沙箱逃逸、 恶意软件、漏洞检测、Node.js漏洞、安全指数、产业研究、数据库模糊测试、DLL劫持利用等。2023/03/20