让我们比较一下在所有情况下都有效的方法
初始数据帧:
arr = np.random.randint(10, 50, size=(1000, 1000))
df = pd.DataFrame(arr)
%%timeit
df.apply(lambda x: x**3)
329 ms ± 117 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
df.transform(lambda x: x**3)
352 ms ± 48 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
df.applymap(lambda x: x**3)
1.07 s ± 59.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Applymap
是最不灵活和最慢的,那么它为什么会存在呢
这里有张便条
transform
和apply
按列处理数据帧,而df.applymap
按元素处理数据帧。因此,对于其他问题applymap
将是唯一基于熊猫的解决方案实施
applymap
实际上是apply(lambda x: x.map(func))
不完全是这样,因为pandas在模块中使用私有方法
来自
applymap
和apply
与map
的计时结果相似:更快的解决方案:
但是,是的,在这个问题上,没有哪个论点是最快的:
但对于需要应用元素的常规情况,
np.vectorize
也是一种解决方案:时间安排(无任务):
仅
applymap
有效,但apply
和transform
无效的示例:例如,将它们除以100,并将数字转换为unicode数字的字符:
np.vectorize
在这里也适用:相关问题 更多 >
编程相关推荐