显示 lambda 函数的进度

15 浏览
0 Comments

显示 lambda 函数的进度

我经常在超过1500万行的数据框上执行pandas操作,我希望能够在特定操作中使用进度指示器。

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

例如,在以下代码中:

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

其中feature_rollup是一个相对复杂的函数,通过各种方法使用许多DF列创建新的用户列。对于大型数据框,这些操作可能需要一些时间,所以我想知道是否可能在iPython笔记本中使用文本输出来更新我关于进度的信息。

到目前为止,我已经尝试了Python的标准循环进度指示器,但它们与pandas没有有意义的交互。

我希望在pandas库/文档中有一些我忽略了的东西,可以让我知道split-apply-combine的进度。一个简单的实现可能会查看apply函数正在处理的数据框子集的总数,并报告已完成的子集的比例作为进度。

这也许是需要添加到库中的东西吗?

0
0 Comments

显示Lambda函数的进度问题可能出现的原因是导入语句中使用了已被弃用的模块。根据最新的更新,使用了"_tqdm_notebook"模块的导入语句已被弃用,应改为使用"from tqdm.notebook import tqdm_notebook"进行导入。此外,根据02/01/2022的更新,还可以使用"from tqdm.auto import tqdm"来简化导入语句。对于在SageMaker上使用Jupyter笔记本的情况,可以使用"from tqdm import tqdm"和"from tqdm.gui import tqdm as tqdm_gui"的组合进行导入。

解决方法:

1. 将导入语句中的"_tqdm_notebook"模块改为"from tqdm.notebook import tqdm_notebook"进行导入。

2. 使用"from tqdm.auto import tqdm"来简化导入语句。

3. 在SageMaker上使用Jupyter笔记本时,可以使用"from tqdm import tqdm"和"from tqdm.gui import tqdm as tqdm_gui"的组合进行导入。

通过以上方法,可以解决Lambda函数显示进度的问题。

0
0 Comments

显示lambda函数的进度

在处理大数据集时,我们经常需要对数据进行分组操作,并对每个组应用一个函数。在这个过程中,我们可能希望能够实时显示函数的进度,以便了解操作的进展情况。下面的代码演示了如何在Pandas中实现这一功能。

首先,我们定义了一个名为`logged_apply`的函数。该函数接受一个分组对象`g`、一个函数`func`以及其他参数和关键字参数。函数内部使用了一个装饰器`logging_decorator`,用于在每次调用函数时更新进度。

具体而言,`logged_apply`函数首先计算每个步骤的百分比,然后初始化进度为0,并在标准输出中显示当前进度。接下来,它定义了一个内部函数`wrapper`,该函数将被应用到分组对象`g`的每个元素上。

在`wrapper`函数内部,我们首先计算当前进度,并在标准输出中更新进度条。然后,我们递增计数器,并调用原始函数`func`来处理数据。最后,我们返回函数的输出。

在`logged_apply`函数的末尾,我们将新定义的函数应用到分组对象`g`上,并在标准输出中显示操作完成的百分比。

这样,我们就可以使用这个函数来实时显示lambda函数的进度。下面的示例代码演示了如何使用它:

g = df_users.groupby(['userID', 'requestDate'])
f = feature_rollup
logged_apply(g, f)

这将在标准输出中显示进度条,并在操作完成后显示100%。

为了方便使用,我们还可以将这个函数添加到分组对象的方法中。下面的示例代码演示了如何实现这一点:

from pandas.core.groupby import DataFrameGroupBy
DataFrameGroupBy.logged_apply = logged_apply
g.logged_apply(f)

这样,我们就可以通过调用`logged_apply`方法来实现相同的效果。

通过在Pandas中定义一个自定义的`logged_apply`函数,我们可以实时显示lambda函数的进度。这对于处理大数据集时的分组操作非常有用。通过使用装饰器和标准输出,我们可以方便地了解操作的进展情况,从而更好地控制代码的执行。

0
0 Comments

问题:如何显示lambda函数的进度?

原因:根据用户需求,tqdm库已经添加了对pandas的支持。通过使用tqdm库的pandas支持,可以在DataFrameGroupBy.progress_apply()方法中显示进度。

解决方法:首先,需要安装tqdm库的最新版本(pip install "tqdm>=4.9.0")。然后,将tqdm库引入代码中,并调用tqdm.pandas()方法。接下来,可以使用progress_apply()方法替代apply()方法来显示lambda函数的进度。

示例代码如下:

import pandas as pd
import numpy as np
from tqdm import tqdm
tqdm.pandas()
df = pd.DataFrame(np.random.randint(0, int(1e8), (10000, 1000)))
df.groupby(0).progress_apply(lambda x: x**2)

除了progress_apply()方法外,tqdm库还支持其他方法,包括map()、applymap()、aggregate()和transform()。

如果想了解更多关于tqdm库的使用方法和自定义回调函数的信息,可以参考GitHub上的示例代码和PyPI上的完整文档,或者导入模块并运行help(tqdm)。

对于tqdm版本4.8及以下的情况,需要使用tqdm和tqdm_pandas两个模块来显示进度。示例代码如下:

from tqdm import tqdm, tqdm_pandas
tqdm_pandas(tqdm())

需要注意的是,如果环境支持的话,tqdm库会自动以单行更新/显示进度的方式进行显示。

总之,通过使用tqdm库的pandas支持,可以方便地显示lambda函数的进度,提高代码的可读性和执行效率。

0