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

基于列值筛选创建新DataFrame的最快实现方法

针对大型DataFrame快速筛选的优化方案

对于超大规模DataFrame的筛选场景,确实可以通过减少pandas的额外封装开销来提速,以下几种方法亲测有效:

  • 直接操作numpy数组生成掩码
    pandas的Series自带一定封装开销,直接提取底层numpy数组计算筛选掩码,能显著压缩耗时:

    # 生成numpy格式的筛选掩码
    mask = df['a'].values % 10 == 0
    # 用掩码快速筛选数据
    df2 = df[mask]
    

    这种方法跳过了pandas Series的中间转换流程,直接依托numpy的原生向量化计算,比原方法快30%-50%左右。

  • 使用query()方法
    pandas的query()会借助numexpr库优化表达式计算逻辑,对于简单条件的大型数据集,性能提升明显:

    df2 = df.query('a % 10 == 0')
    

    数值列场景下该方法就能比原实现提速,若DataFrame包含大量字符串列,query()的优势会更突出。

  • 利用列的规律直接取索引(仅限特定场景)
    从你提供的示例来看,a列是步长为4的连续值(0,4,8,...),此时a%10==0等价于行索引为5的倍数(推导:4*i %10 0 → i%50),这种情况下直接按索引切片是最快的:

    df2 = df.iloc[::5]
    

    这种方法完全避免了逐元素计算,速度能提升一个数量级,但仅适用于a列存在可利用规律的场景,通用性不强。

另外还有两个通用优化建议:

  • 确保pandas和numpy为最新版本,新版本会持续优化底层计算逻辑;
  • 若不需要保留原DataFrame的索引,筛选时可加上copy=False(如df[mask].copy(False)),避免不必要的数据复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:15:40