为何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
相关产品推荐
相关产品推荐

