5.3老板交给我一个任务,简单处理一些数据,三个CSV文件,每个都是2.3G大小,以下是要求

看着觉得很easy,兴冲冲地去搞了,当时还是用的notepad++写python代码,对于python来说,表里面的要求利用分片,替换等都可以完成,只剩下最后的滤重比较麻烦,想来想去,用了最笨的方法,遍历,还是两重的,时间复杂度瞬间飙到了n平方,代码跑了一晚上,还没跑出结果,于是放弃这个蠢办法,查了查数据清洗常用工具,发现有excel,于是尝试用excel解决问题,先根据需要滤重的三个属性进行排序,之后根据三个属性上下相邻的两个两行是否相同添加了新的一列,有重复则赋值TRUE,没有则赋值FALSE,保存之后,再利用python读取处理,凡是TRUE的直接略过,只处理FALSE的,自以为很聪明的解决了问题,结果发给老板,后来想起来打开excel的时候提示我“可能会损失部分数据”,而且查到了excel现在只能显示1048567条数据,所以想看看到底丢了多少条,用python读取之后,发现原文件有近两千万条数据,而我只处理了104万条,周末就上网查了很多资料,python的pandas库适合用来做数据处理,用import导入pandas库失败之后,下载安装了Anaconda,搭好环境之后(详情请见:https://www.zhihu.com/question/58033789)

按照正常思路,肯定是先去重再处理(去重可以去掉一半多数据),我将去重分成两步,先将所有属性全相同的去重之后再按照指定属性去重,然后按照要求对每一行数据进行处理,最后写出,后来看了pandas库的用法,里面的DataFrame有列名,而我的原始数据没有列名,所以我先将原始文件利用python的读取CSV文件读出来,判断是否是“脏”数据之后,存入一个list里(rows=[]),写入目标文件时,先将列名写入,然后将list写入,后来发现每次运行这个程序,电脑就卡死,清理了半天电脑之后发现还是如此,后来意识到可能是因为数据量太大,rows占了太多内存导致电脑卡死,所以想到了办法:先打开目标文件,写入列名,再打开原始文件,按行读取,按照条件判断这一行是否为“脏”数据,不是的话再按照上面表格里的要求进行处理,之后按行写入目标文件,这样一来,电脑内存占用率下降,电脑也就不会卡了,最后再将初步处理过的文件利用pandas打开,利用其中的DataFrame数据结构的方法进行去重,两千万条的数据五分钟之内处理完成,以下为源代码:

import csv
rows=[]
with open(r'C:\Users\Hanju\Desktop\uploadPortal(5).csv',"w", newline='') as _csvfile: writer = csv.writer(_csvfile)#先写入columns_namewriter.writerow(["Dev_mac","Action","User_mac","User_mac_head","Bssid","WiFi","Time","Date"])i=0with open(r'D:\UploadPortalData\uploadPortal (5).csv',encoding='UTF-8') as csvfile:readCSV=csv.reader(csvfile,delimiter=',')for row in readCSV:if(len(row)!=8):continuerow1=[]i+=1row1.append(row[0].replace(':','')[-5:])if row[2]=='auth':row1.append('1')elif row[2]=='deauth':row1.append('2')elif row[2]=='portal':row1.append('3')elif row[2]=='portalauth':row1.append('4')row1.append(str(row[3].replace(':','')))row1.append(str(row[3].replace(':','')[0:6]))if row[0]==row[4]:row1.append('2')else:row1.append('5')if 'City-WiFi-5G' in row[5]:row1.append('2')elif 'City-WiFi' in row[5]:row1.append('1')else:row1.append('0')row1.append(float(row[6])/86400.0-2.0/3.0+719530.0)row1.append(row[7])writer.writerow(row1)print('Done')
print(i)import pandas as pd
df=pd.read_csv(r'C:\Users\Hanju\Desktop\uploadPortal(5).csv')
#print(df.head())
#print(df.tail())
print(df.shape)
New_df=df.drop_duplicates(['Action','User_mac','Time'])
print(New_df.shape)
#print(New_df.head())
#print(New_df.tail())
New_df.to_csv(r'C:\Users\Hanju\Desktop\uploadPortal(5)_Final.csv')
print('Done')

为了查看去重效果,加了几个输出

在这挖一个坑,其实还是应该先去重再处理会更省时间,但是目前还没有想到更好的办法,以后想到了再来更新,还是要再看看pandas库,实在太强大,不得不服

下面贴一部分原始数据:

F0:AC:D7:73:11:EC,d93004d3-2164-44a0-b4fc-f5adfcf56207,portal,3C:A3:48:45:EA:5E,F0:AC:D7:73:11:EC,City-WiFi,1524813532,20180427

F0:AC:D7:73:11:EC,d93004d3-2164-44a0-b4fc-f5adfcf56207,portal,3C:A3:48:45:EA:5E,F0:AC:D7:73:11:EC,City-WiFi,1524813532,20180427
F0:AC:D7:73:11:EC,d93004d3-2164-44a0-b4fc-f5adfcf56207,portal,3C:A3:48:45:EA:5E,F0:AC:D7:73:11:EC,City-WiFi,1524813532,20180427
F0:AC:D7:73:11:EC,d93004d3-2164-44a0-b4fc-f5adfcf56207,portal,3C:A3:48:45:EA:5E,F0:AC:D7:73:11:EC,City-WiFi,1524813532,20180427
F0:AC:D7:73:11:EC,d93004d3-2164-44a0-b4fc-f5adfcf56207,portal,3C:A3:48:45:EA:5E,F0:AC:D7:73:11:EC,City-WiFi,1524813532,20180427

这是处理后的部分数据:

,Dev_mac,Action,User_mac,User_mac_head,Bssid,WiFi,Time,Date
0,311EC,3,3CA34845EA5E,3CA348,2,1,737177.6381018519,20180427
17,311EC,1,F42981BEF089,F42981,2,1,737177.6349074075,20180427
18,311EC,2,F42981BEF089,F42981,2,1,737177.6349074075,20180427
19,311EC,1,F42981BEF089,F42981,2,1,737177.6349189816,20180427
20,311EC,1,3CA34845EA5E,3CA348,2,1,737177.6349421295,20180427

就用这个不算完善的结果来作为我CSDN博客的处女作吧,毕竟,终于动手写了一篇,虽然都是流水账,可能对别人没有多大参考价值,以后的博客多写一些遇到的坑及解决办法吧,做些记录的同时也有可能对别人有所帮助,毕竟我自己遇到的好多问题都是参考了很多博主的文章得以解决的,就到这里吧!

利用python处理两千万条数据的一些经验(仅供自己记录)相关推荐

  1. MySQL利用存储过程自动生成千万条数据

    文章目录 ​前言 ​一.实现思路 ​二.实现步骤 ​1.创建数据库 ​2.创建存储表和内存表 ​3.创建所需函数 ​4.创建存储过程 ​5.调用存储过程插入数据 ​6.统计数据库 ​ 拓展 ​总结 前 ...

  2. python 抓取微博评论破亿_如果利用Python分析14亿条数据!资深程序员手把手教你!过亿级!...

    挑战 1-gram 的数据集在硬盘上可以展开成为 27 Gb 的数据,这在读入 python 时是一个很大的数据量级.Python可以轻易地一次性地处理千兆的数据,但是当数据是损坏的和已加工的,速度就 ...

  3. Python selenium Boss直聘数据爬取(仅供学习使用)

    写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家 注:BOSS直聘数据为js加载数据,故使用selenium ...

  4. python怎么筛选excel数据_python筛选数据excel表格-如何利用python提取两个excel对比后的重复值的信息?...

    怎么用python读取excel表格的数据 import xlrd #open the .xls file xlsname="test.xls" book = xlrd.open_ ...

  5. python爬取关注度高股票,Python爬取股票数据,让你感受一下什么是一秒钟两千条数据...

    本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于青灯编程,作者:清风 Python GUI编程:高清电影在线观看平台制作,全网电影免费 ...

  6. insert批量插入500ms_如何快速安全的插入千万条数据

    作者:ksfzhaohui 最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库. 思路 1.估算文件大小 因为告诉文 ...

  7. 如何快速安全的插入千万条数据?

    最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库. 思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概 ...

  8. 对一千万条数据进行排序---编程珠玑第二版 第一章

    本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序. 每个数字用4byte,1M即可存储250 000个数据,显然,只 ...

  9. mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?

    最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库. 思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概 ...

最新文章

  1. 【点云论文速读】点云高质量3D表面重建
  2. 动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法
  3. 半监督+标签传播算法
  4. oracle设置表字段小写,将oracle中的字段和表名全部修改为小写
  5. idea双击无反应,打不开的解决方法,两种情况。
  6. 分布式系统原理 之2 基本副本协议
  7. 【转】英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
  8. mysql增删改查 工具类_JDBC工具类实现对数据库数据的增删改查
  9. mysql 容灾 灾备 备份
  10. 马尔可夫随机场 MRF
  11. reviewboard mysql_ReviewBoard 的安装和使用
  12. springboot毕设项目流浪动物救助和领养平台e1yqy(java+VUE+Mybatis+Maven+Mysql)
  13. Mybatis-Plus如何使用
  14. 【数学之美】分形图形动画演示欣赏
  15. [Crypto]ECB模式攻击
  16. 为什么键盘没反应了 键盘没反应原因分析及解决方法
  17. C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致。
  18. INSERT INTO SET
  19. 设计师找灵感,就上这5个网站~
  20. 2019年6月6日第十五周体育馆团体预约系统UML软件工程项目日志

热门文章

  1. android不规则背景,Android不规则图像填充颜色小游戏
  2. Hadoop空闲时无法提交任务
  3. VScode 配置 Java 开发环境 (VSCode 天下第一)
  4. 微信小程序下拉加载数据
  5. 在微信别人@你时下表情雨
  6. COCO/VOC 数据集加速下载
  7. php is uploaded file,php is_uploaded_file 函数
  8. mybatis中的ResultMap使用
  9. 基于JAVA儿童思德教育网计算机毕业设计源码+系统+lw文档+部署
  10. Chrome浏览器打开网页慢的解决方案