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

10万行级大矩阵计算列均值时pandas运行速度过慢的优化方案咨询

pandas大矩阵列均值计算性能优化方案

优化后代码如下:

import pandas as pd
import numpy as np

def filtering(data):
    # 统一转换数据类型为float32,消除object类型带来的计算开销
    data = data.astype(np.float32, copy=False)
    # 一次性计算所有列的均值,矢量化操作效率远高于逐列计算
    col_means = data.mean(axis=0)
    
    healthy = []
    nmibc_hg = []
    nmibc_lg = []
    mibc_hg = []
    
    # 仅遍历列名和已经算好的均值,无重复计算开销
    for col_name, mean_val in col_means.items():
        if 'HEALTHY' in col_name:
            healthy.append(mean_val)
        elif 'NMIBC_HG' in col_name:
            nmibc_hg.append(mean_val)
        elif 'NMIBC_LG' in col_name:
            nmibc_lg.append(mean_val)
        elif 'MIBC_HG' in col_name:
            mibc_hg.append(mean_val)
    
    return healthy, nmibc_hg, nmibc_lg, mibc_hg

核心优化点:

  • 消除逐列计算的重复开销:原代码循环中每次单独调用单列mean方法,会产生大量重复的函数调用、数据读取开销,改为一次性计算全量列均值后,底层直接调用numpy矢量化运算,10万行80列的数据集计算耗时可以压缩到毫秒级。
  • 解决数据类型导致的性能损耗:原代码耗时达到小时级的核心诱因大概率是DataFrame列为object类型,逐列计算均值时会反复做隐式类型转换,提前统一转换为float32类型(0~1的数值范围完全满足精度要求),既减少内存占用,也完全规避了类型转换开销。
  • 简化判断逻辑:前面的分支已经过滤了所有包含NMIBC_HG的列,最后一个MIBC_HG的判断不需要额外增加排除逻辑,减少不必要的字符串匹配开销。

补充说明:如果执行类型转换时报错,说明列中存在非数值格式的内容,可先通过pd.to_numeric(data[col], errors='coerce')批量处理列,将非法值转为空值后再计算均值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:09:04