加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 为什么在一个案例中快速更改pandas数据框的列中的值而

发布时间:2020-12-16 23:06:55 所属栏目:Python 来源:网络整理
导读:我有两段似乎做同样事情的代码但是一条代码比另一条快几千倍. 这是第一篇: t1 = time.time()df[new_col] = np.where(df[col] j,val_1,val_2)t2 = time.time()ts.append(t2 - t1) 在ts我有以下价值观: 0.0007321834564208984,0.0002918243408203125,0.00027
我有两段似乎做同样事情的代码但是一条代码比另一条快几千倍.

这是第一篇:

t1 = time.time()
df[new_col] = np.where(df[col] < j,val_1,val_2)
t2 = time.time()
ts.append(t2 - t1)

在ts我有以下价值观:

0.0007321834564208984,0.0002918243408203125,0.0002799034118652344

相比之下,这部分代码:

t1 = time.time()
df['new_col'] = np.where((df[col] >= i1) & (df[col] < i2),val,df.new_col)
t2 = time.time()
ts.append(t2 - t1)

创建使用以下值填充的ts:

0.11008906364440918,0.09556794166564941,0.08580684661865234

我无法弄清楚第一次和第二次任务之间的本质区别.

在这两种情况下,df应该是相同的.

添加

事实证明,本质区别并不在我所看到的地方.在快速版本的代码我有:

df = inp_df.copy()

在类方法的开头(其中inp_df是方法的输入数据框).在慢速版本中,我直接在输入数据框上操作.复制输入数据帧并对其进行操作后,它变得很快.

解决方法

第一次只使用一个条件,因此它应该比检查这两个条件更快.简单的例子使用ipython:
In [3]: %timeit 1 < 2                                                                                                                                         
20.4 ns ± 0.434 ns per loop (mean ± std. dev. of 7 runs,10000000 loops each)

In [4]: %timeit 1 >= 0 & 1 < 2                                                                                                                                
37 ns ± 1.37 ns per loop (mean ± std. dev. of 7 runs,10000000 loops each)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读