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

使用Pandas处理35GB大文件:读取单列并chunk统计最高频次名称

处理超大CSV文件:分块读取目标列并统计名称频次

太懂这种崩溃的感觉了——35GB的文件直接怼进内存,kernel扛不住简直太正常!咱们换个轻量思路,只加载需要的列+分块处理,既能避开内存爆炸,又能精准完成统计,下面是具体方案:

核心思路拆解

  • 只读取目标列:用usecols参数指定仅加载"名称"列(替换成你实际的列名),砍掉99%不需要的数据
  • 分块迭代读取:用chunksize把大文件切成小块分批处理,每次只在内存里存一小部分数据
  • 累计统计频次:每处理一块就统计该块的名称出现次数,逐步累加得到全局结果

完整可运行代码

import pandas as pd

# 初始化空Series,用来存累计的名称频次
name_total_counts = pd.Series(dtype='int64')

# 启动分块读取:只加载名称列,每次读10万行(可根据你的内存调整大小)
chunk_iterator = pd.read_csv(
    "/Users/Desktop/EQR_Data/EQR_Transactions_1.csv",
    usecols=['名称'],  # 这里替换成你文件中实际的名称列名
    chunksize=100000,
    low_memory=False
)

# 遍历每一块,逐步累加统计结果
for idx, chunk in enumerate(chunk_iterator, 1):
    # 统计当前块的名称频次
    chunk_counts = chunk['名称'].value_counts()
    # 和全局统计合并,缺失的名称用0填充后累加
    name_total_counts = name_total_counts.add(chunk_counts, fill_value=0)
    # 可选:打印进度,避免长时间等待无反馈
    print(f"已完成第{idx}块处理,累计统计{int(name_total_counts.sum())}条记录")

# 找出频次最高的名称及其次数
top_name = name_total_counts.idxmax()
top_count = int(name_total_counts.max())

print(f"\n频次最高的名称是:{top_name},累计出现{top_count}次")

额外优化小技巧

  • 如果内存特别紧张,把chunksize调小(比如5万、1万行),牺牲一点速度换内存安全
  • 若名称列存在缺失值,统计前可以加chunk['名称'].dropna(),避免把NaN也算作一个"名称"
  • 追求更快速度的话,还可以试试dask.dataframe——它专门处理超大数据集,语法和Pandas几乎一致,底层会自动并行处理分块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:11