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

为何timeit测试Pandas方法耗时久甚至挂起?如何正确计时?

Pandas方法计时问题:timeit挂起/耗时过长的原因与解决办法

为什么会出现挂起或耗时久的情况?

timeit默认会重复执行目标代码100万次(针对短代码的默认配置)。哪怕df.iloc[-1]单次执行速度极快,百万次累加起来的时间也会拉到几十秒,看起来就像程序挂起。

你两次尝试的写法都没修改默认执行次数:

  • 第一种写法里,setup代码仅执行一次,但主语句df.iloc[-1]还是会被重复跑百万次;
  • 第二种写法把DataFrame初始化移到外部,主语句的执行次数依然是默认的百万次,所以才会耗时38秒。

能不能用timeit给Pandas方法计时?

当然可以,只要调整执行次数,让总耗时在合理范围内就行。

具体解决方法

  • 手动指定执行次数:给timeit传入number参数,设置适合的执行次数(比如1万次),大幅缩短总耗时:

    import pandas as pd
    import timeit
    
    df = pd.DataFrame([[1,1]])
    # 设定执行10000次
    total_time = timeit.timeit("df.iloc[-1]", globals=locals(), number=10000)
    print(f"10000次执行总耗时: {total_time}秒")
    
  • 用IPython/Jupyter魔法命令(更省心):如果在IPython或Jupyter环境里,%timeit会自动判断合适的执行次数,直接给出准确的平均耗时,不用手动设置:

    import pandas as pd
    df = pd.DataFrame([[1,1]])
    %timeit df.iloc[-1]
    
  • 手动计时(适合简单场景):如果不需要多次执行取平均,用time.perf_counter()直接测单次耗时也可以:

    import pandas as pd
    import time
    
    df = pd.DataFrame([[1,1]])
    start = time.perf_counter()
    df.iloc[-1]
    end = time.perf_counter()
    print(f"单次执行耗时: {end - start:.8f}秒")
    

内容的提问来源于stack exchange,提问作者Jonny Shanahan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:13:18