如何评估Python Pandas中向量化任务的进度?寻求简易方案
追踪Pandas向量化任务进度的简易方法
不用tqdm的话,有两个简单实用的方案,可以兼顾向量化的执行效率和进度追踪:
方案一:分块处理+进度打印
将大DataFrame拆分成若干小块,每完成一块的向量化处理就打印进度。这种方式既保留了向量化的执行效率,又能通过块级进度掌握整体任务状态:
chunk_size = 100000 # 根据内存容量和任务复杂度调整块大小 total_chunks = len(df) // chunk_size + 1 for chunk_idx in range(total_chunks): start = chunk_idx * chunk_size end = min((chunk_idx + 1) * chunk_size, len(df)) # 对当前块执行向量化处理 df.loc[start:end-1, 'B'] = df.loc[start:end-1, 'A'].apply(a_function) # 打印当前进度 print(f"进度:{chunk_idx+1}/{total_chunks} 块完成,累计处理 {end} 行")
方案二:给自定义函数加计数器
给你要执行的a_function套一层计数逻辑,每处理一定行数就打印进度。单进程场景下实现简单,能看到细粒度的行数进度:
process_count = 0 print_step = 10000 # 每处理10000行打印一次进度 def tracked_process(x): global process_count process_count += 1 if process_count % print_step == 0: print(f"已处理 {process_count} 行") return a_function(x) # 执行向量化处理并追踪进度 df['B'] = df['A'].apply(tracked_process) print(f"任务完成,总计处理 {process_count} 行")
注意事项
- 分块方案适合超大型数据集,能避免单次加载过多数据占用内存,进度更新更宏观;
- 计数器方案适合需要细粒度进度的场景,但如果
a_function本身耗时极长,建议调大print_step,避免频繁打印拖慢执行速度; - 如果用多进程/多线程执行,全局计数器会出现计数不准的情况,此时优先选择分块方案。
内容的提问来源于stack exchange,提问作者RiGonz
相关产品推荐
相关产品推荐

