小编典典

pandas 操作过程中的进度指示器

all

我经常对超过 1500 万行的数据帧执行 pandas 操作,我希望能够访问特定操作的进度指示器。

pandas split-apply-combine 操作的基于文本的进度指示器是否存在?

例如,在类似的情况下:

df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)

wherefeature_rollup是一个有些复杂的函数,它采用许多 DF
列并通过各种方法创建新的用户列。对于大型数据帧,这些操作可能需要一段时间,所以我想知道是否可以在 iPython
笔记本中提供基于文本的输出,以更新我的进度。

到目前为止,我已经尝试了 Python 的规范循环进度指示器,但它们并没有以任何有意义的方式与 pandas 交互。

我希望我在 pandas 库/文档中忽略了一些东西,可以让人们知道拆分-应用-
组合的进度。apply一个简单的实现可能会查看函数正在运行的数据帧子集的总数,并将进度报告为这些子集的已完成部分。

这可能是需要添加到库中的东西吗?


阅读 27

收藏
2022-05-13

共1个答案

小编典典

由于大众需求,我在( )中添加了pandas支持。与其他答案不同,这 不会显着减慢熊猫* 的速度——这是一个例子:tqdm``pip install "tqdm>=4.9.0" *DataFrameGroupBy.progress_apply

import pandas as pd
import numpy as np
from tqdm import tqdm
# from tqdm.auto import tqdm  # for notebooks

# Create new `pandas` methods which use `tqdm` progress
# (can use tqdm_gui, optional kwargs, etc.)
tqdm.pandas()

df = pd.DataFrame(np.random.randint(0, int(1e8), (10000, 1000)))
# Now you can use `progress_apply` instead of `apply`
df.groupby(0).progress_apply(lambda x: x**2)

如果您对它的工作原理感兴趣(以及如何为自己的回调修改它),请参阅GitHub 上的示例、
PyPI上的完整文档,或导入模块并运行help(tqdm)。其他支持的功能包括mapapplymapaggregatetransform

编辑


要直接回答原始问题,请替换:

df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)

和:

from tqdm import tqdm
tqdm.pandas()
df_users.groupby(['userID', 'requestDate']).progress_apply(feature_rollup)

注意: tqdm <= v4.8:对于低于 4.8 的 tqdm 版本,tqdm.pandas()您必须这样做:

from tqdm import tqdm, tqdm_pandas
tqdm_pandas(tqdm())
2022-05-13