用python合并单元格
诺~,这就是表哥。
当领导把一堆表哥发给你的时候,你看着下午四点的钟,感觉自己下班后的所有小计划都一一破灭了,又要加班了... ... 你拿起了手机,打开了美团外卖... ...
老板:把这个表哥的资料整理一下,整理好了发给我。
你以为老板想要的是介样滴:
image.png
奋战了几个小时,发给老板。
老板半个小时回复:这样太乱了,把一个人的业绩都合并一下。
你望着上千行的表哥手无足措,满脑子都是表哥,怎么解决这个表哥?
实际老板想要的是介样滴:
image.png
你一边干着活,一边想着各种问候领导的话,嗯,活还是得干。那么如何处理这上千行嗷嗷待合并的表哥呢?
拿好板凳,小葵花课堂开课啦!
image.png
当用户一个需求甩到我们的面前的时候,就要分析一下有几种解决办法。
或者直接在网上搜一下,看大家有没有遇到一样的情况的,如果有,太好了,抄之。如果没有,那只能自己创造啦!或者看着别的代码或者思路觉得不靠谱还不如自己一展身手。
方案1:
先读取表哥数据,然后for循环处理需要合并的单元格。
方案2:
站在巨人的肩膀上,寻找优秀的框架,在优秀的框架基础上进一步修改。
之前短暂接触过pandas,其dataframe特别符合数据表格,也许它有强大的功能呢?
那我们先打开pandas的官方网站,从官方文档入手,国外优秀的开源项目都有一份很完善的文档作为支撑,不像国内,没开源项目代码开源,文档居然收费,呵呵哒~。离开源精神相差太远,目测要发展起来很难,因为它自己把自己给局限起来了,很不明智。扯远了,我们继续看pandas的官方文档。
image.png
10分钟了解pandas,我看到了其中的Grouping,其实就是分组排序嘛,学过数据库的大家都懂,我们看看分组排序能否解决我们的需求:
image.png
刚翻了没几行就发现了让我眼前一亮的东西!你们发现了没有?那我来个特写好了:
image.png
红框出第一行啊,是不是我们想要的样子呢?
别慌,先继续往下走走。
... ...
... ...
... ...
... ...
... ...
其中省略1000字,本来想写写过程,最近实在是忙直接上结果吧。
关键部分代码:
#依赖的软件包,pandas、xlrd、openpyxl
import pandas as pd
import numpy as np
BASE_DIR='your file path' # 你的文件路径
df = pd.read_excel(BASE_DIR)
df.fillna('', inplace=True)
df.reset_index(inplace=True)
# 上面一行关键代码,没有这一行是不行滴,尝试N次外加重复阅读官方文档之后的结果
wf_groups = df.groupby(['姓名', '电话', '家庭住址',
'业绩', '考核', '时间'])
wf_groups.agg([np.mean]).to_excel('你想要的表哥导出.xlsx') # 导出在当前文件夹下面
好了,我们跑完之后看看结果吧。
image.png
我们看到,表哥基本上是你想要的表哥了,动动鼠标删掉没有用到的行和列就可以了。
如果有强迫症,那么我们继续。
from openpyxl import load_workbook
filename = 'your file path'
wb = load_workbook(filename)
ws = wb.active
ws.delete_cols(13) #删除第 13 列数据
ws.delete_rows(3) #删除第 3行数据
wb.save(filename)
wb.close()
根据你家表哥的样子,删除你想删除的行或者列。
如果你家表哥比较多,那就写个for循环遍历一下,后面就是你跟你的表哥的事情了,小编就不过多掺和了。
不懂的小伙伴后台私信我吧。