Python如何处理大数据(知识整理)
来源:互联网 发布:linux解包boot.img 编辑:程序博客网 时间:2024/06/03 15:31
博文1:pandas.read_csv——分块读取大文件
http://blog.csdn.net/zm714981790/article/details/51375475
今天在读取一个超大csv文件的时候,遇到困难:
- 首先使用office打不开
- 然后在python中使用基本的pandas.read_csv打开文件时:MemoryError
- 最后查阅read_csv文档发现可以分块读取。
- read_csv中有个参数chunksize,通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader,IO Tools 举例如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 指定iterator=True 也可以返回一个可迭代对象TextFileReader :
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 我需要打开的数据集是个csv文件,大小为3.7G,并且对于数据一无所知,所以首先打开前5行观察数据的类型,列标签等等:
http://blog.csdn.net/asdfg4381/article/details/51689344
面对读取上G的数据,Python不能像做简单代码验证那样随意,必须考虑到相应的代码的实现形式将对效率的影响。如下所示,对pandas对象的行计数实现方式不同,运行的效率差别非常大。虽然时间看起来都微不足道,但一旦运行次数达到百万级别时,其运行时间就根本不可能忽略不计了:
故接下来的几个文章将会整理下渣渣在关于在大规模数据实践上遇到的一些问题,文章中总结的技巧基本是基于pandas,有错误之处望指正。
1、外部csv文件读写
大数据量csv读入到内存
- 分析思路:数据量非常大时,比如一份银行一个月的流水账单,可能有高达几千万的record。对于一般性能的计算机,有或者是读入到特殊的数据结构中,内存的存储可能就非常吃力了。考虑到我们使用数据的实际情况,并不需要将所有的数据提取出内存。当然读入数据库是件比较明智的做法。若不用数据库呢?可将大文件拆分成小块按块读入后,这样可减少内存的存储与计算资源
- 注意事项:open(file.csv)与pandas包的pd.read_csv(file.csv ): python32位的话会限制内存,提示太大的数据导致内存错误。解决方法是装python64位。如果嫌python各种包安装过程麻烦,可以直接安装Anaconda2 64位版本
- 简易使用方法:
- 1
- 1
- 读取需要的列:
- 1
- 2
- 1
- 2
chunker对象指向了多个分块对象,但并没有将实际数据先读入,而是在提取数据时才将数据提取进来。数据的处理和清洗经常使用分块的方式处理,这能大大降低内存的使用量,但相比会更耗时一些
- 分块读取chunk中的每一行:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
将数据存到硬盘
- 直接写出到磁盘:
- 1
- 1
- 分块写出到磁盘:
- 对于第一个分块使用pandas包的存储IO:
- 保留header信息,‘w’模式写入
data.to_csv(path_save, index = False, mode = 'w')
- 接下的分块写入
- 去除header信息,‘a’模式写入,即不删除原文档,接着原文档后继续写
data.to_csv(path_save, index = False, header = False, mode = a')
- 少量的数据写出:
少量的数据用pickle(cPickle更快)输出和读取,非常方便 ,下面分别是写出和读入
写出:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
读入:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
高效读取外部csv到python内部的list数据结构
- 效率低下的方法:使用pd读入需要从pd转换到python本身的数据结构,多此一举
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 效率高的方法:直接将外部数据读入进来
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
2、数据分析时常用数据结构之间的转化
数据集的横向与纵向合并
- 简单地横向合并数据集:
- 问题分析:
- 纵向的合并使用list并不好,因为需要去拆解list的每一个行元素,并用extend去拓展每一行的纵向元素
- 最好使用dataframe中的concat函数:c = pd.concat([a, b], axis = 1),当axis=0时表示合并行(以行为轴)
- 1
- 2
- 3
- 1
- 2
- 3
- 类似数据库的表合并:join(待完整)
- 1
- 1
- 简单纵向合并数据集:
- 纵向合并数据集可以考虑一下几种方法:
- 读取数据为list格式,使用append函数逐行读取
- 将数据集转换为pandas中的dataframe格式,使用dataframe的merge与concat方法
- 方法:
- 方法一:使用dataframe读入,使用concat把每行并起来
- 方法二:先使用list读入并起来,最后转换成dataframe
- 方法三:先使用list读入并起来大块的list,每块list转换成dataframe后用concat合并起来
- 比较:方法一由于concat的静态性,每次要重新分配资源,故跑起来很慢; 方法二与三:会快很多,但具体没有测试,以下是使用方法三的代码:
阅读全文
0 0
- Python如何处理大数据(知识整理)
- python 处理大数据
- python处理大数据
- 精心整理 | 大数据体系知识术语
- ITK如何处理大数据
- Flex知识大整理
- 超全整理!Python数据分析知识体系
- Python 知识整理
- java 如何处理大数据---技巧
- 如何使用JDBC快速处理大数据
- 如何进行大数据分析及处理?
- 如何进行大数据分析及处理?
- 数据库如何处理大数据访问
- 如何进行大数据分析及处理?
- 如何处理大数据文件+录入数据
- 如何进行大数据分析及处理?
- 数据项目知识整理
- 如何整理知识体系
- springboot入门(一)
- OpenGL ES 三种类型修饰 uniform attribute varying
- 基于NotePad应用的功能扩展
- servlet3.0 文件上传
- Python 调用R
- Python如何处理大数据(知识整理)
- 《极客与团队》的读后感
- 反向传播算法介绍
- Sqoop的命令使用
- PHP and MySQL Web Development习题作业集(二)
- 2017程序员综合素质调研测试
- 内存泄漏
- 解析Excel超过24小时的时间
- Jfinal中Db类的的使用