前情提要:

工作原因需要处理一批约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的更多相关文章

  1. .NET MVC Json()处理大数据异常解决方法

    [1-部分原文]: .NET MVC Json()处理大数据异常解决方法 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进 ...

  2. MySQL分页查询大数据量优化方法

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...

  3. 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

    1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...

  4. IIS大数据请求设置方法

    大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 2.大量的用户同时对系统的同一个页面,同一个表的大数据量进行查询操作 3.大量的用户同时对系统的同一个 ...

  5. elasticsearch5.0集群大数据量迁移方法及注意事项

    当es集群的数据量较小的情况下elasticdump这个工具比较方便,但是当数据量达到一定级别比如上百G的时候,elasticdump速度就很慢了,此时我们可以使用快照的方法进行备份 elasticd ...

  6. PHP处理大数据导出Excel方法

    在日常的工作中,很多时候都需要导出各种各样的报表,但是如果导出的数据一旦比较大,很容易就导致超时,对于这种问题,有很多的解决方法,例如网上说的分批导出.采用CSV.还有就采用JAVA.甚至是C++和C ...

  7. [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength

    本文转自:http://blog.csdn.net/blacksource/article/details/18797055 先对项目做个简单介绍: 整个项目采用微软的ASP.NET MVC3进行开发 ...

  8. ASP.NET MVC Json()处理大数据异常解决方法,字符串的长度超过了为 maxJsonLength

    问题: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. <system.web.exten ...

  9. ASP.NET MVC Json() 处理大数据异常解决方法 json MaxJsonLength

    网上很多解决方案,在webconfig中添加,但是实践证明无效 <system.web.extensions> <scripting> <webServices> ...

随机推荐

  1. LNMP下使用Phabricator(一)

    首先是安装. 安装过程并不复杂,英文看得懂的可以自己看原文 https://secure.phabricator.com/book/phabricator/article/installation_g ...

  2. NPOI读写Excel【转载】

    参考示例:https://www.cnblogs.com/luxiaoxun/p/3374992.html 感谢! 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表): ...

  3. Android 网络提交数据(使用Asynchronous Http Client)

    项目主页及简单使用方法http://loopj.com/android-async-http/ 页面布局就不复制了,把主要的Activity记录下来,供自己以后使用: package com.exam ...

  4. ribbon重试机制

    我们使用Spring Cloud Ribbon实现客户端负载均衡的时候,通常都会利用@LoadBalanced来让RestTemplate具备客户端负载功能,从而实现面向服务名的接口访问. 下面的例子 ...

  5. deb软件安装

    deb是debian linux的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian Package的简写,是为Debian 专 ...

  6. BaseAdapter获取View之三重境界

    在BaseAdapter获取View之前,BaseAdapter需要与数据源相关联. 可以使用构造方法: private List<ItemBean> baseListItems; pri ...

  7. 工作方法-scrum+番茄工作法

    1.产品和开发团队近期的工作分析和安排,使用scrum. 产品的工作:通过product backlog来列出 开发团队近期的工作安排:通过sprint backlog来列出,由个人认领,并估算(优先 ...

  8. 科学效法自然:微软研究人员测试AI控制的滑翔机

    编者按:正如一颗苹果砸出了万有引力,自然界所有存在的事物和现象都有其科学合理的一面,小小的鸟儿也能够给科学带来丰富的灵感和启示. 最近,微软研究人员从自然出发,研究鸟类能够自由停留在空中的科学原理,并 ...

  9. 用指针的方式实现,重写strrchr函数的功能

    char *strchrTest(char * ptr,char c); Action(){ char str[]={"thisisadog"}; char c='s'; lr_o ...

  10. Python+selenium之键盘事件

    keuys()类提供键盘上所有的按键方法.send_keys()方法可以用来模拟键盘输入. from selenium import webdriver from selenium.webdriver ...