pandas处理较大数据量级的方法 - chunk,hdf,pkl
前情提要:
工作原因需要处理一批约30G左右的CSV数据,数据量级不需要hadoop的使用,同时由于办公的本本内存较低的缘故,需要解读取数据时内存不足的原因。
操作流程:
方法与方式:首先是读取数据,常见的csv格式读取时一次性全部读取进来, 面对数据量较大(本次3亿条实车数据)时,需要 分批 并且有 选择性 的读取后 提取有效信息 删除冗余信息并清理内存。
同时,为了使处理数据时效率更高,将整理好的数据实时读取进来以后,保存成快速且可读的数据形式另行存储。然后释放内存并读取下一批数据直到整个流程结束
下面是操作代码:
#import pickle # pkl存储与 hdf5存储
import pandas as pd
# 释放内存
import gc
reader = pd.read_csv(r'E:\VEH_GBK_2019-01-01.csv', encoding='gbk',iterator=True,low_memory=False,usecols=[0,1,2,4])
title_mc=['location','vid','上报时间','充电状态'] loop = True
chunkSize = 1000000
ans_vid={}
location_list=['上海','重庆','广东','北京']
for i in location_list:
ans_vid[i]=[] while loop:
try:
chunk = reader.get_chunk(chunkSize)
chunk.columns=title_mc;
chunk['充电状态']=chunk['充电状态'].astype(str)
chunk['location']=chunk['location'].astype(str)
for i in location_list:
temp=chunk[chunk['location'].str.contains(i)]
if temp[(temp['充电状态']=='1.0') | (temp['充电状态']=='4.0')].empty==False:
ans_vid[i].append(temp[(temp['充电状态']=='1.0') | (temp['充电状态']=='4.0')])
del temp
gc.collect() del chunk
gc.collect() except StopIteration:
loop = False
print ("Iteration is stopped.") for i in location_list:
ans_vid[i]=pd.concat(ans_vid[i]) location_list=['shanghai','chongqing','guangdong','beijing'] for i in location_list:
ans_vid[i].to_hdf(i+'_charging.h5',key=ans_vid[i],encoding='gbk')
gc.collect()放在del 参数的后面用以及时释放内存。
读取的核心代码是:
reader = pd.read_csv(r'E:\VEH_GBK_2019-01-01.csv', encoding='gbk',iterator=True,low_memory=False,usecols=[0,1,2,4]) # usecols是读取原数据的某几列 chunkSize是分批读取的量级 chunk = reader.get_chunk(chunkSize)
本次读取的存储格式采用的是h5格式即hdf,该种格式易于读取较大数据量级,同时也有一些数据格式可以保存较大的数据量级: pkl ,npy等
推荐h5(保存dataframe)与pkl(保存字典格式),其读取速度更快.易于使用
h5格式调用pandas内置对dataframe的保存即可: 例 df是一个需要保存的较大的dataframe。代码为
df.to_hdf('123.h5',encoding='gbk',key='df')
pkl 保存需要先导入pickle ,所需保存的字典为ans_vid, 代码如下
# 导出
output = open('usage_top2veh.pkl', 'wb')
pickle.dump(ans_vid, output)
output.close()
# 导入
pkl_file = open('usage_top2veh.pkl', 'rb')
data2 = pickle.load(pkl_file)
pkl_file.close()
pandas处理较大数据量级的方法 - chunk,hdf,pkl的更多相关文章
- .NET MVC Json()处理大数据异常解决方法
[1-部分原文]: .NET MVC Json()处理大数据异常解决方法 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进 ...
- MySQL分页查询大数据量优化方法
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...
- 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节
1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...
- IIS大数据请求设置方法
大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 2.大量的用户同时对系统的同一个页面,同一个表的大数据量进行查询操作 3.大量的用户同时对系统的同一个 ...
- elasticsearch5.0集群大数据量迁移方法及注意事项
当es集群的数据量较小的情况下elasticdump这个工具比较方便,但是当数据量达到一定级别比如上百G的时候,elasticdump速度就很慢了,此时我们可以使用快照的方法进行备份 elasticd ...
- PHP处理大数据导出Excel方法
在日常的工作中,很多时候都需要导出各种各样的报表,但是如果导出的数据一旦比较大,很容易就导致超时,对于这种问题,有很多的解决方法,例如网上说的分批导出.采用CSV.还有就采用JAVA.甚至是C++和C ...
- [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength
本文转自:http://blog.csdn.net/blacksource/article/details/18797055 先对项目做个简单介绍: 整个项目采用微软的ASP.NET MVC3进行开发 ...
- ASP.NET MVC Json()处理大数据异常解决方法,字符串的长度超过了为 maxJsonLength
问题: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. <system.web.exten ...
- ASP.NET MVC Json() 处理大数据异常解决方法 json MaxJsonLength
网上很多解决方案,在webconfig中添加,但是实践证明无效 <system.web.extensions> <scripting> <webServices> ...
随机推荐
- HDU-1827-Summer Holiday(强连通分量,贪心)
链接:https://vjudge.net/problem/HDU-1827 题意: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所 ...
- 补充:jQuery的ajax
一.jQuery的ajax 什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 简言之,在不重载整个网页的情况下,AJA ...
- Exploring refit, an automatic type-safe REST library for .NET Standard
自动类型安全的.NET标准REST库refit 在SCOTT HANSELMAN 博客上看到一个好东西<Exploring refit, an automatic type-safe RES ...
- NIO基础之Buffer
java.io 核心概念是流,即面向流的编程,在java中一个流只能是输入流或者输出流,不能同时具有两个概念. java.nio核心是 selector.Channel.Buffer ,是面向缓冲区( ...
- vue2.0:(七)、vue-resource
本篇文章开始前,先介绍下什么是vue-resource,并且现在还有一个axios. Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必 ...
- Windows系统下查看文件编码类型
这是一个程序员的最基本的技能,原谅我到现在才去了解 以前只知道window操作系统下文件大部分默认编码是ANSI,中文版是GBK编码 如果想要查看或者修改文件编码的话有两种方式 一:用记事本打开文件, ...
- 加载动画插件spin.js的使用随笔
背景: 在请求后台的“漫长”等待过程中,为了提升用户体验,需要一个类似 的加载动画效果,让用户明确现在处于请求过程中,而不是机子down掉或者网站死了 静态demo(未与后台交互): HTML代码如 ...
- codevs 1028 花店橱窗布置
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整 ...
- Android(java)学习笔记132:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。
导致这个错误的原因是工程重名了: 并不是仅仅指文件夹重名,相信很多人也曾经修改过文件夹的名称,可惜没什么用处,关键是修改工程里面的一个文件! 也就是.project这个文件! 用记事本打开,修改一下& ...
- Android(java)学习笔记119:BroadcastReceiver之 短信发送的广播接收者
有时候,我们需要开发出来一个短信监听器,监听用户发送的短信记录,下面就是一个案例,这里同样需要使用广播机制. 下面同样是代码示例,MainActivity.java 和 activity_main. ...