返回

在 Pandas 中添加进度指示器以跟踪拆分-应用-合并操作

python

在 Pandas 中使用进度指示器跟踪拆分-应用-合并操作

简介

当使用 Pandas 对海量数据集执行拆分-应用-合并操作时,了解操作的进度至关重要。在本文中,我们将探索如何在 Pandas 中添加进度指示器,以清晰了解操作的进展。

使用 tqdm 库

tqdm 库提供了一个易于使用的进度条,可与 Pandas 的 apply 函数结合使用。它在每个数据帧子集上显示一个进度条。

from tqdm import tqdm

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

使用 concurrent.futures 库

concurrent.futures 库支持并发执行任务。它允许并行化拆分-应用-合并操作,并使用 tqdm 库跟踪每个任务的进度。

import concurrent.futures
from tqdm import tqdm

def feature_rollup_wrapper(df):
    return feature_rollup(df)

with concurrent.futures.ThreadPoolExecutor() as executor:
    results = list(tqdm(executor.map(feature_rollup_wrapper, df_users.groupby(['userID', 'requestDate']))))

编写自定义进度指示器

如果你需要更高的灵活性,可以编写自己的进度指示器。实现一个自定义进度条类,并使用 Pandas 的 progress_apply 方法跟踪进度。

class MyProgressBar:
    def __init__(self, total):
        self.total = total
        self.progress = 0

    def update(self, progress):
        self.progress = progress
        print(f'{self.progress / self.total * 100:.2f}% complete')

df_users.groupby(['userID', 'requestDate']).progress_apply(feature_rollup, progress_bar=MyProgressBar(len(df_users)))

结论

通过使用上述方法之一,你可以轻松地在 Pandas 中添加进度指示器。这可以提高对操作进度的可视性,并在处理大型数据集时帮助调试问题。

常见问题解答

  1. 为什么要使用进度指示器?
    答:进度指示器提供操作的实时反馈,帮助评估进度并识别瓶颈。

  2. 哪种方法最适合我?
    答:tqdm 库是最简单的选择,而 concurrent.futures 库支持并发处理,对于大型数据集更有优势。自定义进度指示器提供最大的灵活性,但需要更多编码。

  3. 我可以同时使用多个进度指示器吗?
    答:可以使用 tqdm 的嵌套进度条来跟踪多个操作。

  4. 如何自定义进度指示器的外观?
    答:tqdm 库提供了各种选项来自定义进度条的外观,包括进度条样式、长度和颜色。

  5. 进度指示器会影响性能吗?
    答:轻量级的进度指示器对性能的影响很小。但是,复杂的自定义进度指示器可能会增加开销。