Python处理大型(>1GB)CSV文件的正确姿势

news2025/1/18 11:06:16

Python大型CSV文件处理

    • 1、背景描述
    • 2、大型CSV文件处理方式



1、背景描述


Pandas在读取大型文件时,通常会遇到内存不足的问题。例如,在某次处理大于1GB的CSV文件时,出现了如下错误:

在这里插入图片描述

那么,针对这种情况,我们应该如何处理呢?本文将提供一些常见的Python大型CSV文件处理方式

2、大型CSV文件处理方式


Pandas提供了一些方法参数可以解决这种问题,使得读取大型CSV文件变得更加容易

2.1、使用Pandas提供的API参数

可以使用usecols参数加载部分列数据,避免全列读取;使用dtype参数读取数据时转换类型,减少内存占用

import numpy as np
import pandas as pd

# 使用usecols加载部分列数据,避免全列读取;使用dtype转换类型读取数据,减少内存占用
data = pd.read_csv(file, usecols=usecols, dtype=dtype)
print(len(data))
print(data.head().to_string())

2.2、分批分块读取

可以使用chunksize参数将数据分成多个块读取,每个数据块包含chunksize行数据,以免发生内存不足的问题

# 每次读取行数为1000
# pd.read_csv()返回迭代器类型:<class 'pandas.io.parsers.readers.TextFileReader'>
for chunk in pd.read_csv(file, chunksize=1000, iterator=True):
    print(type(chunk))    # <class 'pandas.core.frame.DataFrame'>
    # 每次处理1000行数据
    print(len(chunk))
    print(chunk.head().to_string())

2.3、使用C引擎

C引擎相较于默认的Python引擎更快

start = time.perf_counter()
data = pd.read_csv(file, dtype=str, engine="c")
print(len(data))
print(data.head().to_string())
print(time.perf_counter() - start)   # 75.78744679992087

当然,也可以使用第三方库进行提速。Dask是Pandas官方推荐使用的一个用于并行和分布式计算大级别数据的Python库,Dask将数据分成多个分区并行计算,Dask DataFrame中的每个分区都是一个Pandas DataFrame,compute()会将Dask DataFrame中的所有底层分区合并为一个Pandas DataFrame。另外,Dask API遵循上游Pandas API

2.4、使用Dask库

Dask允许我们处理大于可用单台计算机RAM的数据,Dask可对TB级数据集进行分布式计算

Dask官方文档:https://docs.dask.org/en/latest/

import dask.dataframe as dd

start = time.perf_counter()
# 返回类型:<class 'dask_expr._collection.DataFrame'>
data = dd.read_csv(file, dtype=str)
print(len(data))
print(data.head().to_string())
print(time.perf_counter() - start)   # 52.351866899989545

更多关于Dask的安装和使用见:https://www.gairuo.com/p/python-dask


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fs模块 练习题

编写程序&#xff1a; 在文件夹data里有文件a.txt和文件b.txt。将文件a.txt和文件b.txt的内容读取后写入文件c.txt中。 一、同步读取 const fs require(fs); let datas1fs.readFileSync(./data/a.txt); let datas2fs.readFileSync(./data/b.txt); let datas3datas1datas2;//对…

AQY214S固态继电器:用于控制各种应用中的模拟信号的紧凑解决方案

AQY214S是一款多功能固态继电器&#xff0c;是一款经过精心设计的精致固态继电器&#xff0c;可在多种应用中与低电平模拟信号共舞。在这次探索中&#xff0c;我们将揭开AQY214S的复杂性&#xff0c;重点介绍其独特的功能&#xff0c;并深入研究其在不同行业中的应用的迷人挂毯…

损失函数和反向传播

1. 损失函数的基础 import torch from torch.nn import L1Loss from torch import nninputs torch.tensor([1, 2, 3], dtypetorch.float32) targets torch.tensor([1, 2, 5], dtypetorch.float32)inputs torch.reshape(inputs, (1, 1, 1, 3)) targets torch.reshape(targe…

【Lidar】Lidar激光雷达一篇全(两万字激光雷达详细介绍)

【Lidar】Lidar激光雷达一篇全 1. 激光雷达测距原理1.1 三角测距1.2 飞行时间测距&#xff08;TOF&#xff0c;Time of Flight&#xff09; 2. 车载激光雷达类别2.1 机械旋转式2.2 固态2.2.1 相控阵 2.3 半固态&#xff08;混合固态&#xff09;2.3.2 微转镜/棱镜 3. 激光雷达性…

gitlab仓库使用流程(开发)

1.1.GitLab代码提交流程&#xff1a; 1.1.1准备阶段&#xff1a; 确保已经安装了Git&#xff0c;并且配置了正确的用户名和邮箱地址。 在本地创建一个新的文件夹&#xff0c;用于存放即将开发的代码。 1.1.2.拉取代码&#xff1a; 使用git clone命令从GitLab上拉取项目代码…

XUbuntu22.04之关闭todesk开机自启动(二百二十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【Session】Tomcat Session 集群

设备 nginx&#xff1a;192.168.67.11 tomcat1&#xff1a;192.168.67.12 tomcat2&#xff1a;192.168.67.13安装nginx &#xff08;192.168.67.11&#xff09; #关闭防火墙和安全机制 [roottest1 ~]# systemctl stop firewalld [roottest1 ~]# setenforce 0#安装epel源 [ro…

还在用ifelse来写业务?了解下Spring状态机

状态机之所以强大&#xff0c;是因为其行为在启动时就以固定的方式定义了操作规则&#xff0c;从而确保了一贯的连贯性和相对较高的可调试性。关键在于&#xff0c;应用程序处于且仅可能处于有限数量的状态中。然后&#xff0c;某些事件发生会使得应用从一个状态过渡到另一个状…

RuoYi-Vue使用RestTemplate无法通过@Autowired注入报错

A component required a bean of type org.springframework.web.client.RestTemplate that could not be found. 解决方法&#xff1a; 将ruoyi-framework模块下找到ApplicationConfig这个配置类使用Bean注入&#xff1a; /*** RestTemplate配置*/Beanpublic RestTemplate r…

基于数据库的全文检索实现

对于内容摘要&#xff0c;信件内容进行全文检索 基于SpringBoot 2.5.6Postgresqljpahibernate实现 依赖 <spring-boot.version>2.5.6</spring-boot.version> <hibernate-types-52.version>2.14.0</hibernate-types-52.version><dependency><…

Chrome浏览器滚动条样式优化

针对Chrome浏览器&#xff0c;可以全局设置滚动条样式&#xff0c;让你的项目更美观 ::-webkit-scrollbar-track-piece {background-color: transparent; } ::-webkit-scrollbar {width: 7px;height: 7px;background-color: transparent; }::-webkit-scrollbar-thumb {border-…

ctfshow(WEB AK赛)

目录 web-观己 web1-观字 web2-观星 web3-观图 web4-观心 过程and分析 web-观己 没啥难的有include 想着伪协议 但是过滤了php 那就是用file为协议读取本地文件 全靠猜 <?php if(isset($_GET[file])){$file $_GET[file];if(preg_match(/php/i, $file)){die(error);}…

【深度学习笔记】9_5 多尺度目标检测

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 9.5 多尺度目标检测 在9.4节&#xff08;锚框&#xff09;中&#xff0c;我们在实验中以输入图像的每个像素为中心生成多个锚框。这些…

opencv中的图像高斯双边模糊—bilateralFilter函数

高斯双边滤波&#xff08;Bilateral Filtering&#xff09;是一种非线性的滤波方法&#xff0c;用于平滑图像&#xff0c;同时保留边缘。与传统的高斯模糊不同&#xff0c;双边滤波在平滑图像的同时&#xff0c;能够避免模糊边缘。这是通过考虑像素值的差异来实现的&#xff1a…

把 Windows 装进 Docker 容器里

本篇文章聊聊如何在 Docker 里运行 Windows 操作系统&#xff0c; Windows in Docker Container&#xff08;WinD&#xff09;。 写在前面 我日常使用 macOS 和 Ubuntu 来学习和工作&#xff0c;但是时不时会有 Windows 使用的场景&#xff0c;不论是运行某个指定的软件&…

YOLOv8_pose-Openvino和ONNXRuntime推理【CPU】

纯检测系列&#xff1a; YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv7-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 跟踪系列&#xff1a; YOLOv5/6/7-O…

Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )

题意翻译 对于下图中的树&#xff0c; 可以用数组表示为 [2,3,3,2]。这种可以表示树的数组&#xff08;即有效&#xff09;需要符合以下条件&#xff1a; 有且只有一个索引 r &#xff0c;符合pr​r 。其中顶点 r 是树的根。对于所有剩下的 n−1 个顶点 i 一定要有在 i 和 pi…

怎么制作自己的微信小程序店铺?

移动互联网的迅猛发展&#xff0c;微信小程序已成为商家拓展线上业务的重要工具。它不仅能够提供便捷的用户访问体验&#xff0c;还能够帮助商家快速构建起一个功能齐全的在线商城。那么&#xff0c;商家怎么制作自己的微信小程序店铺&#xff1f; 一、准备工作&#xff1a; …

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙&#xff0c;打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…

MWC 2024|「Paraverse平行云」展示空间计算时代沉浸式交互体验

&#x1f389;当地时间2月26日&#xff0c;2024年世界移动通信大会&#xff08;MWC2024&#xff09;在巴塞罗那拉开帷幕。作为全球移动通信领域最大的技术展会之一&#xff0c;MWC被视为全球通信行业风向标。 &#x1f680;随着Vision Pro再次点燃全球空间计算技术热情&#xf…