0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Pandas数据帧库概述、性能及安装

Linux爱好者 来源:开源前哨 作者:Lenskit 2022-07-11 12:02 次阅读

导语

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

它有以下几个特点:

  • 懒|立即执行

  • 多线程

  • SIMD

  • 查询优化

  • 强大的表达式API

  • 支持多种语言:Rust、Python 等

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

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

# embarrassingly parallel execution
# very expressive query language
>>> (
...     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"),     # groups by "cars"
...             pl.col("A").sum().over("fruits").alias("sum_A_by_fruits"),                         # groups by "fruits"
...             pl.col("A").reverse().over("fruits").alias("rev_A_by_fruits"),                     # groups by "fruits
...             pl.col("A").sort_by("B").over("fruits").alias("sort_A_by_B_by_fruits"),            # groups 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           │
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘

性能

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

此处我们自己用一些示例代码来对比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安装

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

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

注意需要Rust version >=1.58

文档

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

Python

  • 安装指南:$ pip3 install polars

  • Python文档[3]

  • 用户指南[4]

Rust

  • Rust文件(主分支)[5]

  • 用户指南[6]

Node

  • 安装指南:yarn install nodejs-polars

  • Node文档[7]

  • 用户指南[8]

[Python]: 从源代码编译polars

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

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

  • 1、安装最新的Rust编译器[9]

  • 2、安装maturin[10]: $ 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 polarsimport polars

Arrow2

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

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
  • 数据帧
    +关注

    关注

    0

    文章

    33

    浏览量

    6647
  • Rust
    +关注

    关注

    1

    文章

    223

    浏览量

    6387

原文标题:6.6K Star!比 Pandas 快很多的数据处理库

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    python数据分析的类

    ,因为它太重要了.Pandas提供了我们很多函数,能够快速的方便的,处理结构化的大型数据,不夸张的说,Pandas是让Python成为强大的数据
    发表于 05-10 15:18

    pandas数据分析的方法

    pandas数据分析中常用方法
    发表于 06-03 06:16

    数据库安装流程及遇到的问题概述

    笔记4-数据库安装
    发表于 07-24 11:04

    pandas数据分析常见操作

    数据分析-pandas数据处理清洗常用总结
    发表于 08-08 06:46

    pandas对babynames数据集的简单处理

    利用Python进行数据分析——第二章 引言(2):利用pandas对babynames数据集进行简单处理
    发表于 08-09 12:58

    pandas是什么?

    系列文章目录提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录
    发表于 07-14 07:48

    数据库安全性概述

    本文主讲 数据库的安全性,欢迎阅读~????目录一、数据库安全性概述二、数据库安全性控制1. 用户标识与鉴别2. 存取控制3. 自主存取控制方法4. 授权与回收5.
    发表于 07-30 06:42

    pandas是什么

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着
    发表于 08-09 07:39

    pandas使用步骤

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结学习内容:学习时间:学习产出:前言一、pandas是什么?二
    发表于 08-10 07:50

    pandas是什么?怎么使用?

    文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言//; Reset handlerReset_HandlerPROC EXPORTReset_Handler [WEAK]
    发表于 12-07 06:37

    pandas是什么?

    文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言一、pandas是什么?二、使用步骤1.引入库代码如下(示例):import numpy as npimport
    发表于 01-11 07:53

    pandas是什么?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着
    发表于 01-12 07:53

    使用Pandas的定制功能来帮助我们自定义内容的显示方式

    Pandas是一个在数据科学中常用的功能强大的Python。它可以从各种来源加载和操作数据集。当使用Pandas时,默认选项就已经适合大多
    发表于 12-19 17:03

    Pandas profiling数据库的功能及解决方案

    Pandas profiling 可以弥补 pandas describe 没有详细数据报告生成的不足。它为数据集提供报告生成,并为生成的报告提供许多功能和自定义。在本文中,我们将探索
    的头像 发表于 03-15 16:31 1624次阅读

    Python Pandas如何来管理结构化数据

    Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series
    的头像 发表于 05-25 11:22 458次阅读
    Python <b class='flag-5'>Pandas</b>如何来管理结构化<b class='flag-5'>数据</b>