Python numpy.where vs.pandas.Series.map
我想知道这两种方法,我应该用哪一种。。。还是有更好的办法Python numpy.where vs.pandas.Series.map,python,pandas,numpy,Python,Pandas,Numpy,我想知道这两种方法,我应该用哪一种。。。还是有更好的办法 df = pd.DataFrame({'values' : [1, 27, 256, 312, ...]}) df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x) df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values']) 谢谢我不确定是否会更好,这里有一个- 大数
df = pd.DataFrame({'values' : [1, 27, 256, 312, ...]})
df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x)
df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values'])
谢谢我不确定是否会更好,这里有一个- 大数据上的计时-
In [172]: df = pd.DataFrame({'values' : np.random.randint(0,100,(1000000))})
In [173]: %timeit df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x)
1 loop, best of 3: 193 ms per loop
In [174]: %timeit df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values'])
100 loops, best of 3: 6.12 ms per loop
In [175]: %timeit df['clip_values_v3'] = df['values'].values.clip(max=20)
100 loops, best of 3: 2.95 ms per loop
不确定是否更好,这里有一个- 大数据上的计时-
In [172]: df = pd.DataFrame({'values' : np.random.randint(0,100,(1000000))})
In [173]: %timeit df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x)
1 loop, best of 3: 193 ms per loop
In [174]: %timeit df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values'])
100 loops, best of 3: 6.12 ms per loop
In [175]: %timeit df['clip_values_v3'] = df['values'].values.clip(max=20)
100 loops, best of 3: 2.95 ms per loop
将
map
与lambda函数一起使用性能将大大降低,但更好的解决方案是使用clip
:df['values']。clip(上限=20)
将map
与lambda函数一起使用性能将大大降低,但更好的解决方案是使用clip
:df['values'].clip(上限=20)