昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条。。。。下面说一下几个解题步骤。。。。一般就是用下面这些方法了,按顺序试试。

一、逐行读取

如果你用pd.read_csv来读文件,会一次性把数据都读到内存里来,导致内存爆掉,那么一个想法就是一行一行地读它,代码如下:

data = []

with open(path, 'r',encoding='gbk',errors='ignore') as f:

for line in f:

data.append(line.split(','))

data = pd.DataFrame(data[0:100])

这就是先用with open把csv的每一行读成一个字符串,然后因为csv都是靠逗号分隔符来分割每列的数据的,那么通过逗号分割就可以把这些列都分离开了,然后把每一行的list都放到一个list中,形成二维数组,再转换成DataFrame。

这个方法有一些问题,首先读进来之后索引和列名都需要重新调整,其次很多数字的类型都发生了变化,变成了字符串,最后是最后一列会把换行符包含进去,需要用replace替换掉。

不知道为什么,用了这个操作之后,还是出现了Memory error的问题。基于这些缺点以及遗留问题,考虑第二种解决方案。

二、巧用pandas中read_csv的块读取功能

pandas设计时应该是早就考虑到了这些可能存在的问题,所以在read功能中设计了块读取的功能,也就是不会一次性把所有的数据都放到内存中来,而是分块读到内存中,最后再将块合并到一起,形成一个完整的DataFrame。

f = open(path)

data = pd.read_csv(path, sep=',',engine = 'python',iterator=True)

loop = True

chunkSize = 1000

chunks = []

index=0

while loop:

try:

print(index)

chunk = data.get_chunk(chunkSize)

chunks.append(chunk)

index+=1

except StopIteration:

loop = False

print("Iteration is stopped.")

print('开始合并')

data = pd.concat(chunks, ignore_index= True)

以上代码规定用迭代器分块读取,并规定了每一块的大小,即chunkSize,这是指定每个块包含的行数。

这个方法能够保持数据的类型,也不需要自己费心思去调整列名和index,比较方便。但不幸的是,我的还是出现了这个问题,如果你的用了这种方法还是出现memory error,你可以继续往下看。

三、扩充虚拟内存

我在运行代码的过程中发现,出现memory error错误的时候,其实我的内存只用到了40+%,所以其实不太可能会出现这个错误啊,所以我查了下,发现有说是内存被限制了,考虑关掉一些可能限制内存的软件啦,扩大虚拟内存啦,这些的。

扩大虚拟内存的方法(我的系统是win8,不过应该都大同小异):

1、打开 控制面板;

2、找到 系统 这一项;

3、找到 高级系统设置 这一项;

4、点击 性能 模块的 设置 按钮;

5、选择 高级面板,在 虚拟内存 模块点击更改;

6、记得 不要 选中“自动管理所有驱动器的分页文件大小”,然后选择一个驱动器,也就是一个盘,选中自定义大小,手动输入初始大小和最大值,当然,最好不要太大,更改之后能在查看盘的使用情况,不要丢掉太多空间。

7、都设置好之后,记得点击 “设置”, 然后再确定,否则无效,最后 重启电脑 就可以了。

悲剧的是我在设置完这一步之后还是出现了内存错误,到这一步就没有问题了的朋友就可以不用看下面一种解法了,如果还是有问题,可以接下来看。

四、更新Pandas和Numpy库为64位

如果你的Python用的是32位的,那么你的pandas和Numpy也只能是32位的,那么当你的内存使用超过2G时,就会自动终止内存。发现这个错误也是因为我察觉到报内存溢出的错误的时候,我的内存明明显示只用了40+%,然后错误提示是在pandas的core中,所以查了一下,发现原来还有这么个大坑。

解决方法就是:先检查一下你的python是多少位的,在shell中输入python,查看位数,如果是32位,那么就重装Python,装一个64位的,但同时你的库也需要重新装了。不过我执行完这一步之后,问题就完美解决了!

五、如果还有内存溢出的错

以上四种方法,按顺序逐一使用,到哪一步错误消失了就可以停止啦。当然了,如果你的内存显示使用达到了99%+,那么就是内存真的不够用,不是别的问题,如果不是数据量特别大,那就是写代码的时候的习惯问题,虽然Python有垃圾回收机制,但是有时候可能来不及回收,尤其是在循环迭代这些过程中,往往会循环完毕了才来得及收拾垃圾,所以记得及时把不要的变量del掉,或者用gc这个垃圾回收库,这样内存自然就一直清清爽爽啦~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

python编程8g的内存够么_详解解决Python memory error的问题(四种解决方案)相关推荐

  1. python编程8g的内存够么_计算机学科大学生购买8G内存笔记本是否够用?

    目前低价位轻薄本里面能升级内存的也只有两种型号:联想小新Air和惠普战66 首先,轻薄本的CPU无论是i5还是i7,两者的性能差别都不大,因为它们的核心和线程是一样,唯一的差别是i7的睿频稍微高一点, ...

  2. python编程8g的内存够么_内存8G够用吗?深入解读~

    导读:买笔记本,预算不是那么充足,不少本本8G内存的能便宜几百块,初次入手本本,就好很想知道,这个8G是否足够使用呢? 就在我发文时刻,我默默把任务管理器打开了: 没错,我的内存是8G的,而且我有独立 ...

  3. python两张图片无缝合成一张_详解基于python的多张不同宽高图片拼接成大图

    #!/usr/bin/env python # -*- coding:utf-8 -*- import PIL.Image as Image import os IMAGES_PATH = 'D:Ma ...

  4. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

  5. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

  6. python selenium爬虫_详解基于python +Selenium的爬虫

    详解基于python +Selenium的爬虫 一.背景 1. Selenium Selenium 是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,支持chrome.firefox等主 ...

  7. python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...

    前言 这周和大家分享如何用python识别图像里的条码.用到的库可以是zbar.希望西瓜6辛苦码的代码不要被盗了.(zxing的话,我一直没有装好,等装好之后再写一篇) 具体步骤 前期准备 用open ...

  8. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

  9. 利用python处理dna序列_详解基于python的全局与局部序列比对的实现(DNA)

    程序能实现什么 a.完成gap值的自定义输入以及两条需比对序列的输入 b.完成得分矩阵的计算及输出 c.输出序列比对结果 d.使用matplotlib对得分矩阵路径的绘制 一.实现步骤 1.用户输入步 ...

最新文章

  1. VS2019使用说明
  2. ARP***原理与解决方法《一》
  3. canvas手机端绘图解决方案
  4. [原创]Logo与Banner
  5. [HNOI2016]网络(树链剖分+线段树+大根堆)
  6. hdu 3177贪心
  7. python os.path.splitext()的用法_Python常用模块之os.path
  8. 7 记账期 012 2021 没有打开
  9. 编码规范二 缩进与注释
  10. css3获取当前时间并显示,实时获取当前时间并展示在页面上
  11. linspace函数matlab_Matlab入门2-莫比乌斯环
  12. Linux关机运行的脚本,Linux关机时执行指定脚本功能实现
  13. 【codevs1295】N皇后问题
  14. java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决
  15. 利用BIRT ReportEngine API开发报表
  16. 三维点云——数据标注
  17. 大学毕业生参考信函提示
  18. 这几个视频提取音频的方法很实用,快来学习
  19. 2019-nCoV肺炎疫情同程查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口
  20. 微信小程序不能直接加载本地静态图像作为背景的解决办法

热门文章

  1. session共享mysql_多服务器session共享之mysql共享
  2. ImageLoader must be init with configuration before using 错误解决方法
  3. cactiez mysql_cactiez使用mysql数据库出现以下报错:“[ERROR] /usr/sbin/mysqld”
  4. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  5. CCNA考试中实验题精讲(RIP,OSPF,VLAN)
  6. WP8.1学习系列(第二十章)——添加控件和处理事件
  7. 【转载】ShowWindow函数
  8. 用开源项目PhotoView实现图片的双指缩放和双击放大缩小
  9. MySQL limit 优化,百万至千万级快速分页:复合索引
  10. 使用apache CXF和maven开发Web Service