添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

(作者:陈玓玏)

分享一个朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助 http://www.captainbed.net/luanpeng

博客推荐:http://www.data-master.net/

昨天在用用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:
        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 32bit 最大只能使用 2G 内存,坑爹之处,超过 2G 报错MemoryError。 而 64bit python则无此限制,所以建议使用 64bit python。 可能存在的问题:以前 numpy、scipy 官方的库只支持 32bit python,现在应该发布了 64bit 对应版本。 以上这篇解决python报错MemoryError问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:详解解决Python memory error问题四种解决方案) 最近刚刚学习Python,用的软件是PyCharm。在手打了一个基于物品的推荐算法,并且跑一个20000+的数据集时,出现了Memory Error错误。一开始以为是代码问题,后面才发现自己的内存已经到达了80%+了。查阅相关资料,这个大哥写的很不错,大家可以去看看。 l解决Python memory error问题四种解决方案). 这是我自己出现的问题 我分析了一下出现这个错误的原因: 1.... MemoryError:涉及到了读取、保存、写入,内存不够用了 解决方法: 检查安装64位python,64位python内的pandas和Numpy都是64位,内存更大。 如果在虚拟机中运行:设置虚拟机内存大小即可(我使用的这种方法) 再次运行,不再报错: 昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条。。。。下面说一下几个解题步骤。。。。一般就是用下面这些方法了,按顺序试试。一、逐行读取如果你用pd.read_csv来读文件,会一次性把数据都读到内存里来,导致内存爆掉,那么一个想法就是一行一行地读它,代码如下:data... 因为要读取从大众点评爬下来的一些数据,所以在文件有点大的情况下就造成jupyter notebook在读取的时候直接卡死,出现memory error的情况。 那么如何解决这样的问题呢?掌柜经过一番探索,终于找到解决的办法,先写上解决的代码: with open('你要读取的文件', 'r',encoding='utf-8') as f: for line in f: re... Python 32bit 最大只能使用2G内存,坑爹之处,超过2G报错MemoryError。如果遇到这种问题,可以先检查自己安装的Python是32bit,还是64bit。而64bit Python则无此限制,所以建议使用 64bit Python。今天在处理一个2G的大数据文本文件时,出现了MemoryError的错误。 python处理大训练集过程中经常会遇到的Memory Error问题 这里看了几位博主的解决方案进行了整理,感谢分享! http://chenqx.github.io/2014/10/29/Python-fastest-way-to-read-a-large-file/ https://blog.csdn.net/weixin_39750084/article/details/81501395 问题描述 在之前的一篇博客后续中,我记录了一个有关MemoryError问题,当时仅是根据自己实际需求简单的叙述了一下解决方式,最近又遇到了这个头疼的问题。 具体异常如下,其实就是创建的np矩阵太大了,内存不够使!这太可怕了,实验室工作站32G内存,你告诉我不够用!我真的找不到目前实验室更好的设备了!!! 几种解决方式 众多大哥给出的解决方式如下: (1)既然是内存不够使,那就换个更大内存配置的电脑吧(这TM还用你说!) (2)numpy 在定义数组的时候,采用更低的精度。从float64降低为float 1.如果python是32位的,装一个64位的python。 2.64位的python仍然memory error,扩大虚拟内存。 扩大虚拟内存后,基本能解决问题。 1、打开pycharm安装目录D:\PyCharm Community Edition 2019.2\bin,找到pycharm.exe.vmoptions文件,编辑 -Xms128m -Xmx768m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false