我正在比较使用map
和apply
计算Dataframe列的简单乘法性能。
我预期apply
版本会比map
快得多,因为我在使用向量化的numpy函数而不是逐个元素进行操作。
然而,事实并非如此,两个版本的性能相同:
apply
版本:
import pandas as pd
import numpy as np
np.random.seed(42)
df1 = pd.DataFrame({
'x': np.random.random(size=10000000)
})
df1['2x'] = df1['x'].apply(lambda arr: arr*2)
# CPU times: user 1.64 s, sys: 180 ms, total: 1.82 s
# Wall time: 1.82 s
地图版本:
import pandas as pd
import numpy as np
np.random.seed(42)
df2 = pd.DataFrame({
'x': np.random.random(size=10000000)
})
df2['2x'] = df2['x'].map(lambda element: element *2)
# CPU times: user 1.65 s, sys: 180 ms, total: 1.83 s
# Wall time: 1.83 s
版本使用情况:Python 3.6.7,Pandas 0.24.2,Numpy 1.16.3。 为什么使用numpy向量化函数的apply版本没有比map版本快得多呢?
apply
和map
没有优劣之分吗? - Felipe.apply
和.map
都是Python中的for循环,它们只是方便的方法,不适用于性能。 - juanpa.arrivillaga