相关疑难解决方法(0)

Pandas mask/where方法与NumPy np.where

在有条件地更新系列中的值时,我经常使用Pandas maskwhere方法来获得更清晰的逻辑.但是,对于性能相对较高的代码,我注意到相对于性能的显着下降numpy.where.

虽然我很乐意接受特定情况,但我很想知道:

  1. 除了// 参数外, Pandas mask/ where方法是否提供任何其他功能?我理解这3个参数但很少使用它们.例如,我不知道参数引用了什么. inplaceerrorstry-castlevel
  2. 是否有任何不平凡的反例,其中mask/ where优于numpy.where?如果存在这样的例子,它可能会影响我选择适当方法的方式.

作为参考,这里有一些关于Pandas 0.19.2/Python 3.6.0的基准测试:

np.random.seed(0)

n = 10000000
df = pd.DataFrame(np.random.random(n))

assert (df[0].mask(df[0] > 0.5, 1).values == np.where(df[0] > 0.5, 1, df[0])).all()

%timeit df[0].mask(df[0] > 0.5, 1)       # 145 ms per loop
%timeit np.where(df[0] > 0.5, 1, df[0])  # 113 ms per loop
Run Code Online (Sandbox Code Playgroud)

对于非标量值,性能似乎进一步分化:

%timeit df[0].mask(df[0] > 0.5, df[0]*2)       # 338 …
Run Code Online (Sandbox Code Playgroud)

python performance numpy series pandas

27
推荐指数
1
解决办法
1440
查看次数

标签 统计

numpy ×1

pandas ×1

performance ×1

python ×1

series ×1