You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaex/Pandas加载转换大数据时的精准进度条实现需求

为Vaex/Pandas大数据操作添加进度条(类似%time的无循环实现)

你需要为Vaex加载大数据、Pandas转换大数据的操作添加进度条以查看剩余时间,且希望像%time一样简便,无需冗余循环。之前用progress.bar的方案无效,进度条无法真正监控操作内部进度,甚至操作完成后仍异常运行。

解决方案

Vaex 内置进度条

Vaex原生支持进度条,无需额外依赖,启用后所有耗时操作都会自动显示进度和剩余时间:

import vaex

# 开启全局进度条
vaex.settings.progressbar.enabled = True

# 直接执行加载/转换操作,进度条自动生效
df_vaex = vaex.open("large_dataset.hdf5")
df_filtered = df_vaex[df_vaex["tolls_amount"] > 50]

Pandas 进度条实现

Pandas本身无内置进度条,可通过以下两种方式实现:

方式1:用tqdm监控操作

tqdm提供Pandas集成,能近似显示进度(部分底层C实现的操作无法实时更新,但结束后会准确完成):

from tqdm import tqdm
import pandas as pd

# 注册Pandas监控
tqdm.pandas()

# 单条操作的进度条实现
with tqdm(total=1, desc="Processing") as pbar:
    sample_tolls_amount = df_panda_tolls.sample(n=4999)
    pbar.update(1)

# 对支持apply的操作,可直接用progress_apply实现实时进度
# df["calculated_col"] = df["original_col"].progress_apply(lambda x: x * 1.5)

方式2:用Dask替代Pandas(推荐大数据场景)

Dask是并行计算框架,语法与Pandas几乎一致,天然支持进度条,适合处理超内存的大数据:

from dask.dataframe import read_csv
from dask.diagnostics import ProgressBar

# 读取大数据集
ddf = read_csv("large_tolls_data.csv")

# 启用进度条执行操作
with ProgressBar():
    sample_tolls_amount = ddf.sample(n=4999).compute()
    # 其他转换操作同理
    df_transformed = ddf[ddf["tolls_amount"] > 20].compute()

原测试代码无效原因

你使用progress.bar.Bar的方式只是在操作前后手动更新进度条,并没有真正Hook到Pandas操作的内部执行流程。Pandas的sample等核心操作是底层C实现的一次性任务,中间没有进度回调,导致进度条直接跳满,无法反映真实进度和剩余时间。

内容的提问来源于stack exchange,提问作者José Miguel Rego Terol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:05:38