gpt4 book ai didi

pandas - Polars 将性能应用于自定义功能

转载 作者:行者123 更新时间:2023-12-03 07:59:38 25 4
gpt4 key购买 nike

除一种情况外,我很享受 Polars 比 Pandas 的显着加速。我是 Polars 的新手,所以这可能只是我的错误用法。无论如何,这是一个玩具示例:在单列上,我需要在我的情况下应用自定义函数,它是来自 probouslypeople 库 ( https://github.com/datamade/probablepeople ) 的 parse 但问题是通用的。

Plain pandas apply 与 Polars 具有类似的运行时,但带有来自 ( https://github.com/nalepae/pandarallel ) 的 parallel_apply 的 pandas 获得的加速与核心数量成正比。

在我看来,Polars 仅使用单核来实现自定义功能,还是我错过了什么?

如果我正确使用 Polars,也许有可能为 Polars 创建像 pandaralell 这样的工具?

!pip install probablepeople
!pip install pandarallel

import pandas as pd
import probablepeople as pp
import polars as pl
from pandarallel import pandarallel

AMOUNT = 1000_000
#Pandas:
df = pd.DataFrame({'a': ["Mr. Joe Smith"]})
df = df.loc[df.index.repeat(AMOUNT)].reset_index(drop=True)

df['b'] = df['a'].apply(pp.parse)

#Pandarallel:
pandarallel.initialize(progress_bar=True)
df['b_multi'] = df['a'].parallel_apply(pp.parse)

#Polars:
dfp = pl.DataFrame({'a': ["Mr. Joe Smith"]})
dfp = dfp.select(pl.all().repeat_by(AMOUNT).explode())

dfp = dfp.with_columns(pl.col('a').apply(pp.parse).alias('b'))


最佳答案

pandarallel使用多处理。

您还可以use multiprocessing with polars.

我们正在使用multiprocessing.pool.Pool.imap以默认设置为例。

import multiprocessing
import polars as pl
import probablepeople as pp
from pip._vendor.rich.progress import track

def parallel_apply(function, column):
with multiprocessing.get_context("spawn").Pool() as pool:
return pl.Series(pool.imap(function, track(column)))

if __name__ == "__main__":

df = pl.DataFrame({
"name": ["Mr. Joe Smith", "Mrs. I & II Alice Random"]
})

df = df.with_columns(pp =
pl.col("name").map_batches(lambda col: parallel_apply(pp.parse, col))
)

print(df)
  • .map_batches() 用于将完整列传递给函数。

  • 该列被传递到parallel_apply以及要在池中执行的 Python 函数,例如pp.parse

  • rich.progress.track() (也与 pip 捆绑在一起)用于进度条。

Working... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
shape: (2, 2)
┌──────────────────────────┬───────────────────────────────────┐
│ name ┆ pp │
│ --- ┆ --- │
│ str ┆ list[list[str]] │
╞══════════════════════════╪═══════════════════════════════════╡
│ Mr. Joe Smith ┆ [["Mr.", "PrefixMarital"], ["Joe… │
│ Mrs. I & II Alice Random ┆ [["Mrs.", "PrefixMarital"], ["I"… │
└──────────────────────────┴───────────────────────────────────┘

性能

作为基本比较,创建 1_000_000行数据框 - 我得到以下运行时:

<表类=“s-表”><标题>多处理持续时间 <正文>是1分23秒没有5平方米

关于pandas - Polars 将性能应用于自定义功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74747889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com