首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas.Series.div()对/=

pandas.Series.div()对/=
EN

Stack Overflow用户
提问于 2019-07-16 15:14:56
回答 1查看 549关注 0票数 2

我很好奇为什么pandas.Series.div()在申请熊猫系列数字时比/=慢。例如:

代码语言:javascript
复制
python3 -m timeit -s 'import pandas as pd; ser = pd.Series(list(range(99999)))' 'ser /= 7'
1000 loops, best of 3: 584 usec per loop

python3 -m timeit -s 'import pandas as pd; ser = pd.Series(list(range(99999)))' 'ser.div(7)'
1000 loops, best of 3: 746 usec per loop

我认为这是因为前者改变了系列的位置,而后者则返回了新的系列。但是如果是这样的话,那么如果div()和mul()没有/=和*/那么快的话,为什么还要去实现它们呢?即使您不想改变这个系列,ser /7仍然比.div()更快:

代码语言:javascript
复制
python3 -m timeit -s 'import pandas as pd; ser = pd.Series(list(range(99999)))' 'ser / 7'
1000 loops, best of 3: 656 usec per loop

那么,pd.Series.div()的用途是什么,它会使它变得更慢吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 15:34:18

熊猫.div显然实施了类似于//=的部门。

有一个单独的.div的主要原因是Pandas采用了一个语法模型,其中对数据文件的操作由连续过滤器(例如.div.str等)的应用程序来描述,这些应用程序允许简单的连接:

代码语言:javascript
复制
ser.div(7).apply(lambda x: 'text: ' + str(x)).str.upper()

以及对多个参数的更简单支持(cfr )。.func(a, b, c)不可能用二进制运算符编写)。

相反,在没有div的情况下编写的代码与以下内容相同:

代码语言:javascript
复制
(ser / 7).apply(lambda x: 'text: ' + str(x)).str.upper()

/操作可能更快,因为与.div()相比,与/操作符关联的Python开销更少。

相反,x /= y运算符取代构造x = x / y。对于基于NumPy (比如Pandas)的矢量化容器,它有一点超越了这一点:它使用就地操作,而不是创建x (潜在的时间和内存消耗)副本。这就是为什么/=/.div()都快的原因。

注意,虽然在大多数情况下这是等价的,但有时(就像本例中的情况一样),它可能仍然需要转换为不同的数据类型,这是在Pandas中自动完成的(但不是在NumPy中)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57060488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档