#1798·tqdm

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
darwin

DataFrame.progress_map 使用 的数量作为条形图的总数, 尽管 pandas 的 DataFrame.map (pandas >= 2.1 替代 applymap) 会将函数调用一次每个 元素 (df.size 次)。

python
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 (一行修复 + 测试更新)。