我经常对超过1500万行的数据帧执行熊猫操作,我很乐意能够访问特定操作的进度指示器。
是否存在基于文本的进度指示器,用于熊猫拆分应用合并操作?
例如,类似:
df_users.groupby(['userID', 'requestDate']).apply(feature_rollup)
其中feature_rollup包含一些DF列并通过各种方法创建新用户列的函数。对于大型数据帧,这些操作可能需要一段时间,因此我想知道是否有可能在iPython笔记本中提供基于文本的输出,从而使我了解进度。
到目前为止,我已经尝试了Python的规范循环进度指示器,但它们并未以任何有意义的方式与熊猫互动。
我希望pandas库/文档中有一些被我忽略的东西,它使人们知道了split-apply-combine的进度。一个简单的实现方法可能是查看apply功能在其上起作用的数据帧子集的总数,并将进度报告为这些子集的完成部分。
这是否可能需要添加到库中?
由于需求旺盛,我pandas在tqdm(pip install "tqdm>=4.9.0")中添加了支持。与其他答案不同,这不会明显降低熊猫的速度-这是以下示例DataFrameGroupBy.progress_apply:
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 df = pd.DataFrame(np.random.randint(0, int(1e8), (10000, 1000))) # Create and register a new `tqdm` instance with `pandas` # (can use tqdm_gui, optional kwargs, etc.) tqdm.pandas() # Now you can use `progress_apply` instead of `apply` df.groupby(0).progress_apply(lambda x: x**2)
如果您对它的工作方式(以及如何为自己的回调进行修改)感兴趣,请参阅github上的示例,pypi上的完整文档或导入模块并运行help(tqdm)。其它支持的功能包括map,applymap,aggregate,和transform。
编辑
要直接回答原始问题,请替换为:
与:
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())