Polars 是一個(gè)速度極快的 DataFrames 庫(kù)。
它擁有以下特性:
1.多線(xiàn)程
2.強(qiáng)大的表達(dá)式API
3.查詢(xún)優(yōu)化
下面給大家簡(jiǎn)單介紹一下這個(gè)模塊的使用方式。
1.準(zhǔn)備
請(qǐng)選擇以下任一種方式輸入命令安裝依賴(lài):
1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install polars
2.Polars 使用介紹
在初始化變量的時(shí)候,Polars用起來(lái)的方式和Pandas沒(méi)有太大區(qū)別,下面我們定義一個(gè)初始變量,后面所有示例都使用這個(gè)變量:
importpolars aspl 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"], } )
選擇需要展示的數(shù)據(jù):
(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"), ]))
效果如下:
他還能使用正則表達(dá)式篩選值并進(jìn)行求和等操作:
# 正則表達(dá)式 (df.select([ pl.col("^A|B$").sum() ])) # 或者多選 (df.select([ pl.col(["A", "B"]).sum() ]))
Polars支持下面這樣復(fù)雜且高效的查詢(xún)及展示:
>>> 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 高級(jí)使用
倒序操作,將值倒序后重新放回變量中,起名為xxx_reverse:
(df.select([ pl.all(), pl.all().reverse().suffix("_reverse") ]))
對(duì)所有列求和,并放回變量中,起名為 xxx_sum:
(df.select([ pl.all(), pl.all().sum().suffix("_sum") ]))
正則也能用于篩選:
predicate = pl.col("fruits").str.contains("^b.*") (df.select([ predicate ]))
在設(shè)定一個(gè)新列的時(shí)候,甚至可以根據(jù)條件來(lái)給不同的行設(shè)定值:
(df.select([ "fruits", "B", pl.when(pl.col("fruits") == "banana").then(pl.col("B")).otherwise(-1).alias("b") ]))
fold 函數(shù)很強(qiáng)大,它能在列上執(zhí)行操作,獲得最快的速度,也就是矢量化執(zhí)行:
df = pl.DataFrame({ "a": [1, 2, 3], "b": [10, 20, 30], } ) out = df.select( pl.fold(acc=pl.lit(0), f=lambdaacc, x: acc + x, exprs=pl.col("*")).alias("sum"), ) print(out) # shape: (3, 1) # ┌─────┐ # │ sum │ # │ --- │ # │ i64 │ # ╞═════╡ # │ 11 │ # ├?????┤ # │ 22 │ # ├?????┤ # │ 33 │ # └─────┘
審核編輯:劉清
-
API
+關(guān)注
關(guān)注
2文章
1510瀏覽量
62278 -
Polar
+關(guān)注
關(guān)注
0文章
13瀏覽量
14154 -
macOS系統(tǒng)
+關(guān)注
關(guān)注
0文章
9瀏覽量
1555 -
vscode
+關(guān)注
關(guān)注
1文章
157瀏覽量
7788
原文標(biāo)題:Polars 速度極快的數(shù)據(jù)處理第三方模塊
文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論