当用pandas处理GB级以上的大文件时,会出现两个问题,一个是读取数据很慢,动辄要好几分钟,另外就是出现内存不足导致程序运行失败。笔者这段时间查了一些解决此问题的方法,在这里分享给大家。
首先我们要知道的是,处理数据的效率跟机器的内存大小有直接关系,所以面对比较大的数据时,先考量下单机内存吃不吃得消,如果可以,再去考虑性能优化的问题,否则我建议还是别用pandas处理了,改用云服务器或者spark等适合处理大数据的工具吧。
这里我用一份数据来做讲解和测试,这份数据有1.65个G,3700万行/5列,算的上大文件了。
先用pandas的read_csv直接读取该文件:
start = time.time()df = pd.read_csv(file_path+'jdata_action.csv')end = time.time()print('pandas read_csv cost:{}'.format(end-start))
可以看到直接读取需要将近一分钟,现在我们设置Dataframe.info()里的memory_usage参数来准确获得内存使用量。
df.info(memory_usage='deep')
虽然文件是1.6个G,但实际使用内存却达到了3.7G,这是由于pandas的内存占用机制造成的,所以用pandas处理数据真的比较吃内存。
下面我从“提升读取效率”和“节省内存”两个方面讲一下解决办法。