excel处理几十万行数据_还在为Excel数据多而苦恼,python黑科技让分分钟整理几万行...

一个朋友在某运动品牌公司上班,老板给他布置了一个处理客户订单数据的任务。要求是根据订单时间和客户id判断生成四个新的数据:

1、记录该客户是第几次光顾

2、上一次的日期时间是什么时候

3、与上次订单的间隔时间

4、这是一个existing客户还是一个new客户(见定义)

**文件说明:**

1、第一列是订单日期和时间(乱序)

2、第二列是客户的id

3、第三列不需要使用

4、60+万行数据

**相关定义如下:**

1、existing:此次下单日期时间与上次日期时间的距离在N天以内,精确到时间(时分秒)

2、new:即超过N天

> **注:想学习Python的小伙伴们进群:850973621领取从0到1完整学习资料 视频 源码 精品书籍 一个月经典笔记和99道练习题及答案**

![QQ截图20201214142838.png](https://upload-images.jianshu.io/upload_images/25205170-48721eaff6beaf19.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image](//upload-images.jianshu.io/upload_images/12650374-71c5d8ada7b91a8e?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)

整体思路

**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文件进行读取,以便进一步分析处理数据。示例代码如下:

![image](//upload-images.jianshu.io/upload_images/12650374-dedeec59adaf381c?imageMogr2/auto-orient/strip|imageView2/2/w/675/format/webp)

以上代码成功输出前100行的日期则说明已经成功读取到数据。输出结果如下:

![image](//upload-images.jianshu.io/upload_images/12650374-e516614d302bdf30?imageMogr2/auto-orient/strip|imageView2/2/w/524/format/webp)

既然读取文件没有问题,进一步浏览整个文件发现存在多余的空行和重复的标题行在读取和转存中可以用正则匹配过滤掉这些行。

![image](//upload-images.jianshu.io/upload_images/12650374-ee435890e23c5483?imageMogr2/auto-orient/strip|imageView2/2/w/623/format/webp)

将读取的行数据转存到list中,以便进行排序。

![image](//upload-images.jianshu.io/upload_images/12650374-a5915f04c73adfa6?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)

将修改后的行数据list写入Excel表格并保存为xslx格式

![image](//upload-images.jianshu.io/upload_images/12650374-ef6403d0490530c4?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)

结果展示

![image](//upload-images.jianshu.io/upload_images/12650374-d2630ac9315ea682?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)

完整代码

![image](//upload-images.jianshu.io/upload_images/12650374-77ccac3503bb0d98?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)

作者:编程新视野

链接:https://www.jianshu.com/p/70e30e72dd76

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Pandas 的 `read_csv` 和 `to_csv` 方法读写 CSV 文件,以及 `chunksize` 参数实现将数据分块。同时,可以结合 `groupby` 方法和遍历操作,将数据分组后,每50万输出为一个新的 CSV 文件。示例代码如下: ```python import pandas as pd # 读取 CSV 文件中的数据 df = pd.read_csv('data.csv') # 将数据分块 chunks = pd.read_csv('data.csv', chunksize=500000) # 按照列名进分组 groups = df.groupby(df.columns.tolist(), sort=False) # 遍历每个数据块,将分组后的数据写入到 CSV 文件中 for i, chunk in enumerate(chunks): # 将数据块与分组后的数据合并 group_chunk = chunk.groupby(chunk.columns.tolist(), sort=False) groups = groups.apply(lambda x: x.append(group_chunk.get_group(x.name), ignore_index=True)) # 如果当前数据块的数超过 50 万,将分组后的数据写入到 CSV 文件中,并开始下一组 if i % 10 == 0 and i > 0: groups.to_csv('output_{}.csv'.format(i // 10), index=False) groups = df.groupby(df.columns.tolist(), sort=False) # 将剩余的数据写入到 CSV 文件中 if len(groups) > 0: groups.to_csv('output_{}.csv'.format((i // 10) + 1), index=False) ``` 这段代码将 CSV 文件 `data.csv` 中的数据读入到 Pandas 的 DataFrame 中,然后将数据分块,每块最多包含 50 万数据。接着,按照列名进分组,并遍历每个数据块,将分组后的数据写入到一个新的 CSV 文件中。如果当前数据块的数超过 50 万,则将分组后的数据写入到 CSV 文件中,并开始下一组。最后,将剩余的数据写入到 CSV 文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值