那曲檬骨新材料有限公司

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
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85040
  • 數據幀
    +關注

    關注

    0

    文章

    47

    瀏覽量

    6783
  • Rust
    +關注

    關注

    1

    文章

    230

    瀏覽量

    6665

原文標題: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是什么?二、使用步驟1.引入庫2.讀入數據總結學習內容:學習時間:學習產出:前言一、pandas是什么?二
    發表于 08-10 07:50

    pandas是什么?

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔文章目錄前言一、pandas是什么?二、使用步驟1.引入庫2.讀入數據總結前言提示:這里可以添加本文要記錄的大概內容:例如:隨著
    發表于 01-12 07:53

    機器學習開發課程,使用Pandas探索數據分析

    Pandas是一個Python,提供了大量數據分析的方法。數據科學家經常和表格形式的數據(比如.csv、.tsv、.xlsx)打交道。
    的頭像 發表于 03-14 18:07 ?4849次閱讀

    Stellaris軟件安裝,特性介紹和資源說明詳細中文概述

    本文的主要內容介紹的是Stellaris軟件安裝,特性介紹和資源說明詳細中文概述
    發表于 05-09 11:20 ?5次下載
    Stellaris軟件<b class='flag-5'>庫</b>的<b class='flag-5'>安裝</b>,特性介紹和資源說明詳細中文<b class='flag-5'>概述</b>

    pandas的快速入門介紹

    pandas 是基于NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量和一些標準的數據模型,提供了高效
    發表于 06-03 08:00 ?0次下載
    <b class='flag-5'>pandas</b>的快速入門介紹

    探究pandas與GUI界面的超強結合

    pandasgui安裝與簡單使用 根據作者的介紹,pandasgui是用于分析 Pandas DataFrames的GUI。這個屬于第三方,使用之前需要安裝。 pip?install
    的頭像 發表于 11-09 10:55 ?1600次閱讀
    探究<b class='flag-5'>pandas</b>與GUI界面的超強結合

    Pandas profiling數據庫的功能及解決方案

    Pandas profiling 可以彌補 pandas describe 沒有詳細數據報告生成的不足。它為數據集提供報告生成,并為生成的報告提供許多功能和自定義。在本文中,我們將探索
    的頭像 發表于 03-15 16:31 ?1864次閱讀

    詳解Python中的Pandas和Numpy

    pandas、numpy是Python數據科學中非常常用的,numpy是Python的數值計算擴展,專門用來處理矩陣,它的運算效率比列表更高效。
    的頭像 發表于 05-25 12:49 ?2677次閱讀

    Python Pandas如何來管理結構化數據

    Python Pandas是一個為Python編程提供數據操作和分析功能的開源工具包。這個已經成為數據科學家和分析師的必備工具。它提供了一種有效的方法來管理結構化
    的頭像 發表于 05-25 11:22 ?723次閱讀
    Python <b class='flag-5'>Pandas</b>如何來管理結構化<b class='flag-5'>數據</b>

    如何使用Python和pandas讀取、寫入文件

    在本文中,我將介紹如何使用 Python 和 pandas 讀取、寫入文件。 1、安裝 pip install pandas 2、讀取 import
    的頭像 發表于 09-11 17:52 ?1292次閱讀

    如何利用Python和pandas來處理json數據

    了如何利用Python和pandas(Python的第三方)來處理json數據,主要內容包含: json數據簡介 常用json數據轉化網站
    的頭像 發表于 11-01 10:59 ?2512次閱讀
    如何利用Python和<b class='flag-5'>pandas</b>來處理json<b class='flag-5'>數據</b>

    使用pandas進行數據選擇和過濾的基本技術和函數

    Python pandas提供了幾種選擇和過濾數據的方法,如loc、iloc、[]括號操作符、query、isin、between等等
    的頭像 發表于 12-01 10:14 ?420次閱讀
    使用<b class='flag-5'>pandas</b>進行<b class='flag-5'>數據</b>選擇和過濾的基本技術和函數
    百家乐赌场大全| 永利百家乐官网现金网| 百家乐补牌规制| 龙岩棋牌乐| 真博百家乐官网的玩法技巧和规则| 威尼斯人娱乐场wnsrdcylcbywz| 百家乐官网庄闲和各是多少| 百家乐技巧和规律| 博彩导航| 百家乐稳中一注法| 昭通市| 玩百家乐输澳门百家乐现场 | 浩博百家乐娱乐城| 金沙足球投注网| 高级百家乐出千工具| 临江市| 百家乐谁能看准牌| 可以玩百家乐官网的博彩公司| 威尼斯人娱乐城微博| 百家乐官网的薇笑打法| 大发888娱乐城怎么玩| 發中發百家乐官网的玩法技巧和规则| 大发888dafa8668| 百家乐官网免费注册| 南木林县| 24山向方位| 百家乐官网公试打法| 博狗百家乐的玩法技巧和规则 | 大发888棋牌游戏官网| 免水百家乐官网的玩法技巧和规则| 波音开户| 百家乐改单软件| 网上真钱娱乐| 立即博百家乐娱乐城| 百家乐官网连长| 宝都棋牌游戏| 百家乐六合彩3535| 百家乐官网十赌九诈| 皇冠网小说网站网址| 百盛百家乐的玩法技巧和规则| 百家乐官网娱乐真人娱乐|