Python中如何加速处理大型CSV文件与pandas dataframe?
1-2GB规模CSV高效处理方案
加载阶段优化
- 裁剪加载范围:仅加载需要的字段,使用
pd.read_csv()的usecols参数指定目标列,避免加载全量无用列,可直接降低数倍内存占用。如果仅需查看数据样例,增加nrows=100参数即可秒级返回前N行,无需全量加载。 - 指定字段类型:提前指定每列的数据类型,避免pandas自动推断为占内存更高的
object类型,数值列可指定为int32/float32(精度允许的前提下),离散分类列指定为'category'类型,示例代码:
dtype_config = { "user_id": "int32", "category": "category", "amount": "float32" } df = pd.read_csv("your_file.csv", dtype=dtype_config, usecols=list(dtype_config.keys()))
- 更换加载引擎:pandas 2.0及以上版本支持
engine='pyarrow'参数,CSV加载速度可达默认C引擎的3-5倍,内存占用也更低。 - 分块加载:如果不需要一次性处理全量数据,增加
chunksize=100000参数,每次仅加载10万行处理,处理完成后自动释放内存,不会占用大量系统资源。
格式转换优化
首次加载CSV后,将数据转成列式存储格式parquet或feather保存,后续直接读取列式文件:
- 加载速度是CSV的10倍以上,全量加载1-2GB对应parquet文件仅需数秒
- 内存占用仅为CSV加载后的1/3到1/5,不会出现系统卡顿问题
示例代码:
# 首次处理转格式 df = pd.read_csv("your_file.csv") df.to_parquet("your_file.parquet") # 后续直接读parquet df = pd.read_parquet("your_file.parquet")
工具替换优化
- 若pandas优化后仍无法满足需求,可替换为
polars库:基于Rust开发,内存效率和运算速度远高于pandas,API设计和pandas高度接近,迁移成本极低,1-2GB规模数据的各类操作均可在秒级完成。 - 简单预处理操作可直接用shell命令完成:比如用
cut命令提取目标列、grep命令筛选目标行,先把原始CSV缩小到目标规模后再导入Python处理,适合仅需处理部分数据的场景。
设备适配优化
2019款MacBook Pro若为8GB内存版本,全量加载CSV后数据膨胀会触发系统交换内存写入SSD,直接导致处理速度骤降、整机卡顿,处理数据前可关闭其他占用高内存的应用,释放足够内存空间。
内容的提问来源于stack exchange,提问作者ranky123
相关产品推荐
相关产品推荐

