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读取超大文件相关推荐

  1. python文件分块读取_Python多进程分块读取超大文件的方法

    本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...

  2. pandas读取csv写入mysql_使用python的pandas库读取csv文件保存至mysql数据库

    第一:pandas.read_csv读取本地csv文件为数据框形式 data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.cs ...

  3. php写入大文件内容_用PHP读取超大文件的实例代码

    数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机 去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一下这 ...

  4. mysql讀取sql_MySQL数据库之python json及mysql读取json文件存sql等问题

    本文主要向大家介绍了MySQL数据库之python json及mysql读取json文件存sql等问题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. preface: 近期帮师 ...

  5. Python用pydicom库读取dicom文件

    Python用pydicom库读取dicom文件并调用 方法1:通过group.element读取 方法2:通过tag读取 方法3:get()方法 通用 import pydicompath = 'x ...

  6. python read_csv chunk_Python 数据分析之逐块读取文本的实现

    背景 <利用Python进行数据分析>,第 6 章的数据加载操作 read_xxx,有 chunksize 参数可以进行逐块加载. 经测试,它的本质就是将文本分成若干块,每次处理 chun ...

  7. python读取超大文件 Python读取大文件(GB)

    最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 我们谈到&qu ...

  8. python文件读取方法read(size)的含义是_Python基于read(size)方法读取超大文件

    pyhon读取文件很方便,但是,如果文件很大,而且还是一行文件,那就蛋疼了. 不过还好有read(size)方法,这个方法就是每次读取size大小的数据到内存中 下面来个示例 def readline ...

  9. python读取超大文件-强悍的Python读取大文件的解决方案

    Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解 这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适 ...

  10. 用python pandas按块读取超大csv/txt

    如果一个csv文件过大,比如说达到好几G,直接读取的话内存估计hold不住,幸好pandas支持使用chunksize指定行数,每次按多少行多少行来读取,这样就避免了一次性读取过多数据导致内存崩溃. ...

最新文章

  1. 复数特征值求特征向量_深刻地认识特征值
  2. python if语句多个条件-Python 条件语句(if..elif..else)
  3. sgmllib Introduction
  4. 使用HTML5的十大原因
  5. 3、Power Query-智能汇总工作簿下的指定或所有工作表数据
  6. 字典类型处理函数及方法实例解析
  7. VTK:交叉点 PolyData 过滤器用法实战
  8. colab把数据放在content下面以及放在drive下面的训练速度比较
  9. SpringMVC实战(注解)
  10. CentOS 安装 php
  11. 大数据分析需要什么技术架构
  12. json字符串转json对象
  13. 中国外显子组测序行业市场供需与战略研究报告
  14. 多目标优化算法:多目标非洲秃鹫优化算法(Multi-objective Africans Vultures Optimization Algorithm,MOAVOA)提供MATLAB代码及参考文献
  15. Vistor VTL 虚拟磁带机相关问题
  16. 计算机管理员无法打开软件,win10系统提示管理员已阻止你运行此应用无法打开应用的解决方法...
  17. i711800h核显相当于什么显卡 i7 11800h相当于台式什么CPU
  18. POJ 1795 DNA Laboratory 已被翻译
  19. Linux驱动之----Linux2.6方式设备注册
  20. 小米手机超长续航优化的设置

热门文章

  1. PKI/CA/电子签名等相关名词解释
  2. 中国科技大学计算机系导师,中国科学技术大学
  3. 2020 中国独立开发者生存现状调研报告
  4. salve mysql_mysql 同步实现, master-salve
  5. Altium Designer之多层板设置
  6. 最后1天,购票渠道即将关闭!Unite 2018开发者大会全日程公布
  7. 11.23Bom完以及pc端端offset
  8. 网站建设就是要大胆创新
  9. ubuntu关闭网络防火墙后,外网依然不能连接ubuntu的端口
  10. 金蝶kis修改服务器,金蝶kis 修改服务器地址