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

如何在Python中直接将大型CSV转为Pickle以降低内存占用?

处理大型CSV文件的内存问题解决方案

关于直接用Pickle处理CSV的疑问

首先明确:Pickle无法直接处理CSV文本文件。Pickle是Python的对象序列化格式,只能序列化已经加载到内存中的Python对象(比如DataFrame),没办法直接读取纯文本CSV并转成Pickle。你之前报错的核心原因是一次性把5GB的CSV全加载到内存,超出了系统内存上限,和转Pickle的操作无关。

但可以通过分块读取+分块序列化/处理的方式,绕开一次性加载整个文件的问题,既避免MemoryError,也能实现后续的DataFrame计算需求。

分块处理CSV并直接输出结果(推荐)

既然你的最终目标是生成处理后的CSV,没必要先转Pickle,直接分块读取、计算、追加输出到新CSV更高效:

import pandas as pd

# 定义分块大小,根据你的内存情况调整,比如10万行一块
chunk_size = 100000
# 输出文件路径
output_path = "processed_data.csv"

# 第一次写入时加表头,后续块跳过表头
first_chunk = True

for chunk in pd.read_csv("large_file.csv", chunksize=chunk_size):
    # 在这里做你的计算,新增列操作
    chunk["new_column"] = chunk["existing_column"] * 2  # 示例计算
    
    # 输出到CSV
    chunk.to_csv(
        output_path,
        mode="a",
        header=first_chunk,
        index=False
    )
    first_chunk = False

如果一定要用Pickle分块存储

如果需要中间用Pickle暂存数据,可以分块序列化到Pickle文件,后续读取时也是分块读取:

分块序列化CSV到Pickle

import pandas as pd
import pickle

chunk_size = 100000
pickle_path = "data_chunks.pkl"

# 分块读取并序列化
with open(pickle_path, "wb") as f:
    for chunk in pd.read_csv("large_file.csv", chunksize=chunk_size):
        pickle.dump(chunk, f)

读取Pickle分块并计算

import pickle

pickle_path = "data_chunks.pkl"
output_path = "processed_data.csv"
first_chunk = True

with open(pickle_path, "rb") as f:
    while True:
        try:
            chunk = pickle.load(f)
            # 执行你的计算逻辑
            chunk["new_column"] = chunk["existing_column"].mean()  # 示例计算
            
            # 输出到CSV
            chunk.to_csv(
                output_path,
                mode="a",
                header=first_chunk,
                index=False
            )
            first_chunk = False
        except EOFError:
            break  # 读取完所有块

关于Pickle读取后的DataFrame可用性

不管是分块还是完整序列化的Pickle,读取后得到的都是标准的pandas DataFrame对象,和直接用read_csv加载的DataFrame完全一样,所有的计算、列操作等功能都可以正常使用,没有任何限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:55:20