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

如何使用pandas过滤大型CSV文件并计算过滤值的平均值

大型CSV过滤+数值均值计算实现方案

数十万行规模的CSV用pandas处理完全不需要额外工具,根据你的内存情况选对应方案即可。

方案1:内存可承载全量文件(优先选,代码最简单)

几十万行常规结构的CSV体积一般在几十到数百MB,普通消费级PC内存完全可以承载,操作步骤如下:

  • 读文件时只加载你实际要用的列,同时指定合适的列类型压缩内存,不要无脑全量读入
  • 用pandas向量化逻辑做行过滤,不要用逐行循环或者apply,性能差距可达两个数量级
  • 直接对过滤后数据集的目标列调用mean方法算均值
    参考代码:
import pandas as pd

# 替换成你自己的文件路径、列名、过滤规则
df = pd.read_csv(
    "your_data.csv",
    # 只加载过滤、计算需要的列,无关列不读
    usecols=["filter_col", "calc_num_col"],
    # 指定列类型减少内存占用,类别型字段设为category,数值按需选精度
    dtype={"filter_col": "category", "calc_num_col": "float32"}
)

# 按行值过滤,多条件判断每个条件要单独加括号,用&表且、|表或,不要用原生and/or
filtered_data = df[
    (df["filter_col"] == "target_val") &
    (df["calc_num_col"] > 0)
]

# 计算均值
avg_res = filtered_data["calc_num_col"].mean()
print(f"过滤后数值均值:{avg_res}")

注意:如果过滤后没有符合条件的行,mean方法会返回nan,注意做空值判断

方案2:内存不足加载全量文件(列数极多/文件体积超2G时用)

如果文件列特别多、体积太大没法一次性读进内存,就用pandas的分块读取能力,逐块过滤、累计统计量,全程内存占用可控:
参考代码:

import pandas as pd

chunk_size = 10000  # 每次读取的行数,可根据内存大小调整,建议5000-50000区间
total_sum = 0  # 累计符合条件的数值总和
valid_count = 0  # 累计符合条件的行数

for chunk in pd.read_csv(
    "your_data.csv",
    usecols=["filter_col", "calc_num_col"],
    dtype={"filter_col": "category", "calc_num_col": "float32"},
    chunksize=chunk_size
):
    # 对当前块做和方案1一致的过滤
    chunk_filtered = chunk[
        (chunk["filter_col"] == "target_val") &
        (chunk["calc_num_col"] > 0)
    ]
    # 累加当前块的统计值
    total_sum += chunk_filtered["calc_num_col"].sum()
    valid_count += len(chunk_filtered)

if valid_count == 0:
    print("无符合过滤条件的数据,无法计算均值")
else:
    avg_res = total_sum / valid_count
    print(f"过滤后数值均值:{avg_res}")

性能优化提示

  • 过滤逻辑尽量用pandas内置的向量化方法,比如字符串匹配用str.contains/str.match,数值判断直接用比较运算符,不要写逐行apply逻辑
  • 数值列如果不需要双精度,优先用float32代替默认float64,整数列根据取值范围选int32/int16,内存占用可以直接减半
  • 类别型的过滤字段优先设为category类型,既省内存又能加快过滤速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:24:30