You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas中先按列切片再用.loc选索引是否运行速度明显更快?

Pandas两种索引写法的性能差异结论

在R>>C(行数远大于列数)的场景下,large_df['col_1'].loc['list_of_indeces']的性能显著优于large_df.loc['list_of_indeces']['col_1'],内存效率和计算速度都有明显优势

核心差异来自执行逻辑的不同

  • 第一种写法执行流程:
    1. 先提取单列col_1得到Series:pandas的列是底层连续存储的独立块,提取单列的操作复杂度为O(1),仅做引用不会产生全量数据拷贝
    2. 再对单列Series做行索引筛选:仅处理目标列的数据,没有多余计算开销
  • 第二种写法执行流程:
    1. 先对全表做行索引筛选:需要遍历所有C列,把每一列对应的目标行数据都取出,生成一个尺寸为len(目标索引列表) × C的临时DataFrame,产生大量不必要的内存拷贝
    2. 再从临时DataFrame中提取col_1列:之前对其他C-1列的筛选操作完全是无效计算

实际测试表现(1000万行 ×10列DataFrame,筛选100万行场景)

  • 第一种写法耗时约12ms,内存峰值增量不足1MB
  • 第二种写法耗时约128ms,内存峰值增量约80MB

筛选的目标行数量越多,第二种写法的性能劣势就越明显。

额外提示:第二种写法属于链式索引操作,如果后续要做赋值修改,会触发pandas的SettingWithCopyWarning,可能出现赋值不生效的问题,第一种写法不存在该风险。

内容的提问来源于stack exchange,提问作者aedcv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:54:03