python read_csv chunk_Python chunk读取超大文件
16GB小水存已经不能适应动辄4GB、8GB的数据文件了。
查询到pandas的read_csv()提供了chunk分块读取能力。
官方示例
这是一张原始的table
In [185]: table = pd.read_csv('tmp.sv', sep='|')
In [186]: table
Out[186]:
Unnamed: 0 0 1 2 3
0 0 0.469112 -0.282863 -1.509059 -1.135632
1 1 1.212112 -0.173215 0.119209 -1.044236
2 2 -0.861849 -2.104569 -0.494929 1.071804
3 3 0.721555 -0.706771 -1.039575 0.271860
4 4 -0.424972 0.567020 0.276232 -1.087401
5 5 -0.673690 0.113648 -1.478427 0.524988
6 6 0.404705 0.577046 -1.715002 -1.039268
7 7 -0.370647 -1.157892 -1.344312 0.844885
8 8 1.075770 -0.109050 1.643563 -1.469388
9 9 0.357021 -0.674600 -1.776904 -0.968914
指定chunksize=4,表明每4行为1个chunk。
In [187]: reader = pd.read_csv('tmp.sv', sep='|', chunksize=4)
In [188]: reader
Out[188]: In [189]: for chunk in reader:
.....: print(chunk)
.....:
Unnamed: 0 0 1 2 3
0 0 0.469112 -0.282863 -1.509059 -1.135632
1 1 1.212112 -0.173215 0.119209 -1.044236
2 2 -0.861849 -2.104569 -0.494929 1.071804
3 3 0.721555 -0.706771 -1.039575 0.271860
Unnamed: 0 0 1 2 3
4 4 -0.424972 0.567020 0.276232 -1.087401
5 5 -0.673690 0.113648 -1.478427 0.524988
6 6 0.404705 0.577046 -1.715002 -1.039268
7 7 -0.370647 -1.157892 -1.344312 0.844885
Unnamed: 0 0 1 2 3
8 8 1.075770 -0.10905 1.643563 -1.469388
9 9 0.357021 -0.67460 -1.776904 -0.968914
返回的reader是TextFileReader类型,它指向若干个chunk位置,只在访问数据的时候才真正把数据读入到内存。
这是一个可迭代的类型,采用for in的形式,即可逐个访问chunk。
每个chunk都是dataframe类型的。
还有一个邪教用法。
如果想跟数组一样,访问第i个chunk要怎么做?
使用 get_chunk(i)这个函数就可以了。
但是根据测试,get_chunk(i),在我这台机子上是固定10行为1个chunk,不受chunksize参数调整。
挺邪乎。
In [190]: reader = pd.read_csv('tmp.sv', sep='|', iterator=True)
In [191]: reader.get_chunk(5)
Out[191]:
Unnamed: 0 0 1 2 3
0 0 0.469112 -0.282863 -1.509059 -1.135632
1 1 1.212112 -0.173215 0.119209 -1.044236
2 2 -0.861849 -2.104569 -0.494929 1.071804
3 3 0.721555 -0.706771 -1.039575 0.271860
4 4 -0.424972 0.567020 0.276232 -1.087401
//官方地址:http://pandas.pydata.org/pandas-docs/stable/user_guide/io.html#io-chunking
实践手册
1.获取行数
count = 0
fp = open('totalExposureLog.out','r', encoding='utf-8')
while 1:
buffer = fp.read(8*1024*1024)
if not buffer:
break
count += buffer.count('\n')
print(count)
fp.close()
//https://blog.csdn.net/u012762054/article/details/78384294
这样你心里就有x数了,知道这个文件有多少行。
估算自己的内存大概撑得住多少行的数据,把原始数据划分为多少块比较合适。
例如我这个文件有102386695行,四舍五入1个亿。
大概划分成500万行,20个chunk就可以了。
2.使用chunk来read_csv
#1亿行,每500w为1个chunk
reader = pd.read_csv('totalExposureLog.out', sep='\t',chunksize=5000000)
for i,ck in enumerate(reader):
print(i,' ',len(ck))
ck.to_csv('../data/bb_'+str(i)+'.csv', index=False)
迭代访问即可。
3.合并表
使用pandas.concat
当axis = 0时,concat的效果是列对齐。
#我的数据分了21个chunk,标号是0~20
loader = [pd.read_csv('../data/bb_'+str(i)+'.csv') for i in range(21)]
pd.concat(loader, axis=0).reset_index(drop=True)
一般来说小水存是不可能把21个chunk都concat到一起的。
根据实际情况调整吧。
python read_csv chunk_Python chunk读取超大文件相关推荐
- python文件分块读取_Python多进程分块读取超大文件的方法
本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...
- pandas读取csv写入mysql_使用python的pandas库读取csv文件保存至mysql数据库
第一:pandas.read_csv读取本地csv文件为数据框形式 data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.cs ...
- php写入大文件内容_用PHP读取超大文件的实例代码
数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机 去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一下这 ...
- mysql讀取sql_MySQL数据库之python json及mysql读取json文件存sql等问题
本文主要向大家介绍了MySQL数据库之python json及mysql读取json文件存sql等问题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. preface: 近期帮师 ...
- Python用pydicom库读取dicom文件
Python用pydicom库读取dicom文件并调用 方法1:通过group.element读取 方法2:通过tag读取 方法3:get()方法 通用 import pydicompath = 'x ...
- python read_csv chunk_Python 数据分析之逐块读取文本的实现
背景 <利用Python进行数据分析>,第 6 章的数据加载操作 read_xxx,有 chunksize 参数可以进行逐块加载. 经测试,它的本质就是将文本分成若干块,每次处理 chun ...
- python读取超大文件 Python读取大文件(GB)
最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 我们谈到&qu ...
- python文件读取方法read(size)的含义是_Python基于read(size)方法读取超大文件
pyhon读取文件很方便,但是,如果文件很大,而且还是一行文件,那就蛋疼了. 不过还好有read(size)方法,这个方法就是每次读取size大小的数据到内存中 下面来个示例 def readline ...
- python读取超大文件-强悍的Python读取大文件的解决方案
Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...
- 用python pandas按块读取超大csv/txt
如果一个csv文件过大,比如说达到好几G,直接读取的话内存估计hold不住,幸好pandas支持使用chunksize指定行数,每次按多少行多少行来读取,这样就避免了一次性读取过多数据导致内存崩溃. ...
最新文章
- 复数特征值求特征向量_深刻地认识特征值
- python if语句多个条件-Python 条件语句(if..elif..else)
- sgmllib Introduction
- 使用HTML5的十大原因
- 3、Power Query-智能汇总工作簿下的指定或所有工作表数据
- 字典类型处理函数及方法实例解析
- VTK:交叉点 PolyData 过滤器用法实战
- colab把数据放在content下面以及放在drive下面的训练速度比较
- SpringMVC实战(注解)
- CentOS 安装 php
- 大数据分析需要什么技术架构
- json字符串转json对象
- 中国外显子组测序行业市场供需与战略研究报告
- 多目标优化算法:多目标非洲秃鹫优化算法(Multi-objective Africans Vultures Optimization Algorithm,MOAVOA)提供MATLAB代码及参考文献
- Vistor VTL 虚拟磁带机相关问题
- 计算机管理员无法打开软件,win10系统提示管理员已阻止你运行此应用无法打开应用的解决方法...
- i711800h核显相当于什么显卡 i7 11800h相当于台式什么CPU
- POJ 1795 DNA Laboratory 已被翻译
- Linux驱动之----Linux2.6方式设备注册
- 小米手机超长续航优化的设置