Python pandas如何高效对DataFrame指定行范围数据做乘法运算
最短耗时实现方案
要实现行位置3到末尾的数据乘0.3且运算耗时最短,直接使用pandas原生iloc切片做原地向量化运算是最优选择,全程走底层C实现的向量化逻辑,无Python层循环开销、无额外数据副本拷贝,性能远高于逐行遍历、apply、链式索引等写法。
实现代码
import pandas as pd # 构造示例DataFrame dataframe = pd.DataFrame({'Energy Consumption': [20, 21, 19, 18, 25, 40, 18]}) # 耗时最短的操作:取位置3及之后的所有行、所有列,原地乘0.3 dataframe.iloc[3:, :] *= 0.3
性能说明
- 该写法依托pandas底层NumPy数组的向量化运算能力,运算逻辑在C层面执行,没有Python级别的循环开销
- 采用
*=原地修改内存中的数据,不会生成新的DataFrame副本,省去了大内存块拷贝的耗时,数据量越大性能优势越明显 - 请勿使用
iterrows逐行遍历、apply逐元素处理、带条件判断的loc筛选这类写法,这类写法的耗时通常是上述最优写法的数倍到上百倍,数据量越大差距越显著
运算结果
执行代码后得到的DataFrame如下:
Energy Consumption 0 20.0 1 21.0 2 19.0 3 5.4 4 7.5 5 12.0 6 5.4
内容的提问来源于stack exchange,提问作者Pradya Panyainkaew
相关产品推荐
相关产品推荐

