Fel*_*ida 2 python numpy dataframe pandas
我正在比较使用map和apply
我预计该apply版本会快得多,因为我正在做一个矢量化的 numpy 函数,而不是一次对一个元素进行操作。
然而,情况并非如此,两个版本的性能相同:
应用版本:
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
Run Code Online (Sandbox Code Playgroud)
地图版本:
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
Run Code Online (Sandbox Code Playgroud)
使用的版本:Python 3.6.7、Pandas 0.24.2、Numpy 1.16.3
为什么apply版本不比版本快得多map,因为它使用的是 numpy 向量化函数?
apply()只是一个伪装的 for 循环,它没有被向量化你通过调用 lambda element 欺骗了自己arr,但实际上它是一个标量。
相反,保持简单,这就像快 100 倍:
df1['2x'] = df1['x'] * 2
Run Code Online (Sandbox Code Playgroud)