Python数据分析如何读取CSV_使用Pandas库高效加载大文件数据

落强吖_4125

落强吖_4125

2026-04-08

444人浏览

原创

读取超大csv必须加chunksize、usecols、dtype、low_memory=false四个参数,以分块读取、按需加载列、显式指定类型、禁用内存优化推断,避免内存溢出和io卡死。

python数据分析如何读取csv_使用pandas库高效加载大文件数据

读取超大CSV卡死或内存爆掉,pd.read_csv 必须加这四个参数

默认直接调用 pd.read_csv('data.csv') 加载几个GB的文件,大概率触发内存溢出或卡在IO上不动。根本原因是pandas会一次性把整张表读进内存、推断每列类型、构建完整DataFrame——对大文件来说纯属浪费。

实操建议:

Python数据分析(免费版)
Python数据分析(免费版)

提供Python数据清洗、统计分析与可视化建议,覆盖业务报表与科研数据的快速处理流程。

下载
  • chunksize 分块读(返回 TextFileReader 迭代器),边读边处理,不囤积数据
  • 显式指定 dtype,跳过类型推断(比如把一列全设为 'category''int32',能省50%+内存)
  • usecols 只读需要的列,尤其避开长文本字段(如日志、JSON字符串)
  • low_memory=False 防止分块推断冲突报 DtypeWarning ——这不是警告,是pandas在悄悄改你数据类型

示例:

for chunk in pd.read_csv('big.csv', chunksize=50000, usecols=['user_id', 'event_time'], dtype={'user_id': 'uint32'}, low_memory=False):
    process(chunk)  # 自定义处理逻辑

日期列解析慢、格式错乱,parse_datesdate_parser 别混用

默认 parse_dates 会调用 dateutil.parser.parse,对百万行以上数据,慢到不可接受;更糟的是,如果某列里混了非法格式(如空值、'N/A'、时间戳秒级/毫秒级混用),它可能静默跳过或转成 NaT,后续分析就埋雷了。

实操建议:

  • 优先用 parse_dates=['col_name'] + infer_datetime_format=True(仅限标准格式如 '2023-01-01''2023/01/01 12:34:56'
  • 非标格式(如 'Jan 1, 2023 12:34 PM')必须配 date_parser,且要用 lambda x: pd.to_datetime(x, format='...') 显式指定format,别依赖自动推断
  • 含时区或毫秒级时间戳,直接用 dtype='datetime64[ms]' + converters 预处理,比 parse_dates 稳定

中文路径、乱码、分隔符异常,encodingsep 不是猜出来的

Windows下保存的CSV常是 gbkgb2312 编码,Linux/macOS生成的多为 utf-8-sig(带BOM)。直接用默认 encoding='utf-8' 读,轻则报 UnicodeDecodeError,重则中文变“”还继续跑——结果全错。

实操建议:

  • 先用命令行确认编码:file -i filename.csv(Linux/macOS)或 chcp + 记事本另存为看编码(Windows)
  • 常见编码优先试:utf-8-siggbklatin-1(后者不会报错,但中文会乱,可用来快速判断是否编码问题)
  • 分隔符不是只有逗号:sep='\t' 对TSV,sep='|' 对管道分隔,sep=r'\s+' 对多空格;若首行有BOM或空格,加 skipinitialspace=True

读取后内存还是高?categorynullable intstring dtype 得手动切

即使用了 dtype,pandas默认仍可能把字符串列存成 object(即Python str指针数组),内存占用是 string 类型的2–3倍;分类字段(如省份、状态码)放 object 更是灾难。

实操建议:

  • 固定取值少的字符串列(≤50个唯一值),强制设 dtype='category',内存降90%很常见
  • 整数列含缺失值,别用默认 float64 模拟,改用 Int64(首字母大写,pandas nullable类型)
  • 纯文本列明确设 dtype='string'(pandas 1.0+),避免 object 引发的隐式转换和性能陷阱
  • 读完立刻用 df.memory_usage(deep=True).sum() 检查,别等跑完才发现内存翻倍

最易被忽略的一点:分块读取时,每块的 category 是独立编码的——合并前得用 pd.concat(..., ignore_index=True) 并重新 astype('category'),否则类别数会指数级膨胀。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1531

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3564

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1549

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

20277

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2527

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2587

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1063

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

576

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2003

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程