原标题:60万行的Excel数据,Python轻松处理
一个朋友在某运动品牌公司上班,老板给他布置了一个处理客户订单数据的任务。要求是根据订单时间和客户id判断生成四个新的数据:
1、记录该客户是第几次光顾
2、上一次的日期时间是什么时候
3、与上次订单的间隔时间
4、这是一个existing客户还是一个new客户(见定义)
推荐下我自己创建的
Python学习交流群960410445,这是Python学习交流的地方,不管你是小白还是大牛,小编都欢迎,不定期分享干货,包括我整理的一份适合零基础学习Python的资料和入门教程。
文件说明:
1、第一列是订单日期和时间(乱序)
2、第二列是客户的id
3、第三列不需要使用
4、60+万行数据
相关定义如下:
1、existing:此次下单日期时间与上次日期时间的距离在N天以内,精确到时间(时分秒)
2、new:即超过N天
整体思路
1、读取表格的行数据存储成list,并按照时间列的升序排序。
2、维护一个map(在python里是字典dict),每个用户 id 作为key,一个二元组(第几次下单,上一次的日期时间)作为value。
3、遍历表格行数据的list。判断客户 id 是否已经存在于map中,若首次出现,则置该客户 id 在map中的value为[1,'首次下单'],对应行数据新增的4个数据为[1,'首次下单',该次日期时间与上次日期时间差,'new']。若已经存在,则更新map中对应的value为[原次数+1,该次日期时间],对应行数据新增的4个数据为[原次数+1,上次日期时间,间隔时间,new/existing取决于间隔时间与预设N]。
4、将修改过后的行数据list写入到Excel工作簿并保存。
读取表格数据
我们可以用xlrd模块对Excel文件进行读取,以便进一步分析处理数据。示例代码如下:
以上代码成功输出前100行的日期则说明已经成功读取到数据。输出结果如下:
既然读取文件没有问题,进一步浏览整个文件发现存在多余的空行和重复的标题行在读取和转存中可以用正则匹配过滤掉这些行。
将读取的行数据转存到list中,以便进行排序。
将修改后的行数据list写入Excel表格并保存为xslx格式
结果展示
完整代码
责任编辑:
文章浏览阅读3.8k次,点赞11次,收藏11次。钢笔工具 形状混合 颜色混合 替换混合轴_ai混合工具指定步数
文章浏览阅读6.3w次,点赞136次,收藏1.3k次。UML是一种统一建模语言,本文以图书管理系统为例,详细介绍了九种图的画法,包含用例图、类图、时序图、协作图、状态图、活动图、包图、组件图和部署图。希望通过本文能对大家了解UML建模有所帮助。_uml图书管理系统
文章浏览阅读6.8k次,点赞43次,收藏92次。深度学习的定义及原理深度学习是一种基于神经网络、具有多个隐藏层来提取高级抽象特征进行模式识别和决策的机器学习技术。其核心思想与人脑神经元相似,通过逐层的计算和学习,将输入数据转化为具有更高级别的表示,从而实现对复杂数据结构的建模和分析。深度学习中最重要的思想是构建可训练的人工神经网络模型。这些模型是由数十甚至数百个神经元层组成的架构,其中每个层都执行着不同的计算和激活函数以处理和传递信息。传递信号的过程被称为前向传播,相应地,在误差信号返向更新参数的过程被称为反向传播。深度学习的关键特征。_深度学习
文章浏览阅读724次。经理人必看的10个管理网站时间:2005年2月21日9:47 阅读数: 管理这玩艺远远看着如同象牙塔中的佛牙舍利,可观而不可玩。其实身在其中无非就是一张窗户纸,没有什么大不了的……… 管理这玩艺远远看着如同象牙塔中的佛牙舍利,可观而不可玩。其实身在其中无非就是一张窗户纸,没有什么大不了的。网络的发展,就是让我们在充分的分享信息资源的同时,通过基于我们的知识结构的合理性分析,使我们_经理在用什么网站,
文章浏览阅读1.5k次,点赞20次,收藏20次。cpp在vsCode中的编译运行与调试_vscode 编译cpp
文章浏览阅读1.2k次。文中统一用 n 表示机器字长原码无符号数可表示范围:0 —— 2n-1 (即全0到全1)有符号数用机器字长第一位表示符号位,剩下的表示数值位,假设机器字长为8位(下同),可以表示为:+8:[x]原 = 0000 1000-8:[x]原 =1000 1000红色标识符号位,下同整数可表示的范围:-(2n-1) —— 2n-1+0.75:[x]原 = 0110 0000-0.75:[x]原 = 1110 0000小数可表示的范围:-(1-2-n)—— 1-2-n(关于原点对称)_字长n位一个有符号数。表示的范围。
文章浏览阅读506次。我们在使用Hibernate的时候,该怎样配置主键生成器,此时就必须先对主键生成策略有一个基本的了解:比如:mysql不支持sequence增长方式, oracle不支持identity.下面列出一张表,对hibernate内置主键生成器进行说明:hibernate内置主键生成器一览表主键生成器说明increment适用于代理主键. _、说出hibernate常用的主键生成器,至少列举出三种
文章浏览阅读203次。阅读和研究某一领域的文献和论文,参考经典的CTF题目和解法。总的来说,要提升CTF个人技能,就需要在不断学习和实践中打好基础,学习攻防技术,练习攻击和防御,与团队成员合作,不断学习和探索最新的技术。与团队成员合作,分享知识,一起探讨解决问题的方法,共同分享各种CTF经验和技巧,激励彼此成长。,是中国最大的网络安全在线培训平台,对CTF感兴趣可以在演武场平台上有丰富的学习资源,学练相结合,能最快的提升个人技能。跟进最新的攻防技术和规则,持续学习和提高自身的技术水平,注重理论与实践结合,并且加强团队合作。_打ctf能培养实战经验
文章浏览阅读836次。问题原因Cannot set headers after they are sent to the client翻译为:发送到客户端后无法设置标头我已经数据处理完了,为啥我还要设置头部呢?,我也没有去重新设置头部…解决步骤在最后send函数前添加await关键词(等待),就没有出现报错register= async (req,res,next)=>{await Login.register(xxx).then( async response=>{ await res.sen_node里面报错can't set header after they are sent
文章浏览阅读974次,点赞24次,收藏21次。如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路,但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢 (O(n)O(logn)不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit array)中的一个点。这样一来,我们只要看看这个点是不是1就可以知道集合中有没有它了。于是乎,布隆过滤器便应运而生了。_布隆过滤器java实现
文章浏览阅读264次。量子位智库 发自 凹非寺量子位 | 公众号 QbitAI在前沿科技这个充满创新活力的领域中,量子位智库密切关注着哪些新技术和突破性进展将主导未来科技潮流。区别于其他智库和研究机构,量子位智库基于量子位长期以来对AI及其他前沿科技的追踪报道,积累了数年对前沿科技的深入洞察。《年度十大前沿科技趋势》系列报告准确把握科技前沿趋势、深入了解技术突破的本质、串联技术突破与产业风口、站在前沿科技产学研交汇地带..._近几年的新技术新科技
文章浏览阅读7.2k次,点赞8次,收藏13次。用DIO的代码做一些讲解,帮助大家更好的理解代码_阅读mcal代码