如何使用Pandas处理超大csv文件-csv文件

之前使用Python读取超大CSV文件时,出现MemoryError错误,甚至死机。。。呕心沥血潜心研究后,发现使用pandas的read_csv模块通过分块读取,可以完美解决针对超大CSV文件进行数据分析处理时的内存不足问题,接下来与大家分享一下。

pandas 安装

Anaconda是一个开源的Python发行版本,其包含了conda、Python、numpy、pandas等180多个科学包及其依赖项。建议直接安装Anaconda2 或 Anaconda3 ,最好装64位。

下载地址如下:

https://www.anaconda.com/

read_csv官方文档链接:

http://pandas.pydata.org/pandas-docs/stable/io.html#io-read-csv-table

从官方文档中我们注意到chunksize 、iterator两个参数,下面我们就这两个参数做详细介绍 。

Iteration

iterator : boolean, default False

Return TextFileReader object for iteration or getting chunks with get_chunk().

chunksize : int, default None

Return TextFileReader object for iteration. See iterating and chunking below.

read_csv——chunksize参数介绍

read_csv中有个参数chunksize,通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader,分块处理可以避免将所有的文件载入内存,仅在使用的时候读入所需内容。数据的处理和清洗通常使用分块的方式处理,可以大大降低内存的使用,同时耗时要相对长一些。

import pandas as pd
reader = pd.read_csv('pandas.csv', sep='|',chunksize=2)
for chunksize_data in reader:
print chunksize_data

输出

如何使用Pandas处理超大csv文件

read_csv——iterator参数

指定iterator=True 也可以返回一个可迭代对象TextFileReader。

import pandas as pd
reader = pd.read_table('pandas.csv', sep='|', iterator=True)
status = True
while status:
try:
chunk = reader.get_chunk(2)
print chunk
except StopIteration:
status = False

输出

如何使用Pandas处理超大csv文件

除了通过分块避免一次性将全部内容加载至内存中,还可以尝试如下方式读取超大csv文件进行数据分析、处理。

  1. 对数据进行降维
  2. 增大机器内存或使用spark集群(pyspark)

转载请说明,若你对有帮助,点赞支持哦。

推荐阅读