DataFrame.progress_map 显示错误的总数 (列数) 并停留在 100%
作者: 2sumtech创建于 2026年8月19日更新于 2026年8月19日
tqdm 4.70.0 (也在 master 96f2e60 中重现)
pandas 3.0.5
Python 3.11.14
darwinDataFrame.progress_map 使用 列 的数量作为条形图的总数, 尽管 pandas 的 DataFrame.map (pandas >= 2.1 替代 applymap) 会将函数调用一次每个 元素 (df.size 次)。
import time
import pandas as pd
from tqdm import tqdm
tqdm.pandas()
df = pd.DataFrame({'a': range(100), 'b': range(100), 'c': range(100)})
df.progress_map(lambda x: time.sleep(0.001) or x)实际结果: 100%|##########| 3/3 [00:00<00:00, 29.85it/s] — 条形图在 300 次调用中达到 100% (3/300, 1% 的工作量), 然后停止移动, 因为更新包装器在 t.n == t.total 时就停止计数了。
预期结果: 100%|##########| 300/300, 与 progress_applymap 显示的相同, 因为这是对相同的元素操作 (总数 = df.size)。
根本原因: 在 tqdm.std.tqdm.pandas 中, 总计算只在特殊情况下计算 df_function == 'applymap'; 'map' (自 4.66.2 起在 DataFrame 中注册) 会进入行/列计数分支。请注意, progress_map 在 pandas >= 3.0 中是唯一的元素操作, 它在 pandas 3.0 中移除了 applymap。我很乐意提交一个 PR (一行修复 + 测试更新)。
内容来源: tqdm/tqdm