gpt4 book ai didi

python - pandas.Series.div() 对比/=

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:42 27 4
gpt4 key购买 nike

我很好奇为什么 pandas.Series.div() 在应用于 pandas Series 数字时比/= 慢。例如:

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() 更快:

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() 有什么用,它会变慢吗?

最佳答案

Pandas .div 显然实现了类似于 //= 的除法。

有一个单独的 .div 的主要原因是 Pandas 包含一个语法模型,其中数据帧上的操作由连续的过滤器的应用程序描述,例如.div.str 等允许简单的连接:

ser.div(7).apply(lambda x: 'text: ' + str(x)).str.upper()

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

相比之下,如果没有 div,同样的代码会写成:

(ser / 7).apply(lambda x: 'text: ' + str(x)).str.upper()

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

相比之下,x/= y 运算符替换了构造 x = x/y。对于基于 NumPy(如 Pandas)的矢量化容器,它更进一步:它使用 in-place 操作而不是创建(可能耗时和内存) 的副本x。这就是为什么 /=/.div() 都快的原因。

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

关于python - pandas.Series.div() 对比/=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com