系列导读

Python办公自动化|从Word到ExcelPython办公自动化|从Excel到WordPython办公自动化|批量合并PDF,拿来就用Python办公自动化|批量处理文件,一学就会Python办公自动化|对比文件,光速完成Python办公自动化|自动更新表格,告别繁琐

同一个操作执行两次,就应该考虑自动化

大家好,又到了Python办公自动化专题。在之前我们详细讲解过如何使用Python自动更新Excel表格并调整样式,在上次的自动化案例中要求两个或多个Excel表格数据要匹配/对称才能够自动更新,今天我们再次来解决在数据不对称的情况下如何自动更新表格,这是更常见的情况,也是我遇到的一个具体需求。

需求分析

现在我们有类似如下一份记录了口袋妖怪名字的分组名单:(未全部展示,实际有A-U组+1个"未分组")

现在有一份更新的名单(仅含名字)

需要根据这份新名单对原来的总表进行更新,即对新名单中的名字按照总表的分组进行更新,剔除不在新名单中的名字,并将新名单中新出现的名字划分到“未分组”中,如上图中的“早小起”

这位读者的需求是一个需要长期重复的任务,每隔一段时间就会拿到一个新名单,需要对总名单进行调整。如果用Excel操作,可能需要反复查找新名单的名字在哪个分组,如果不存在则手动添加到“未分组”,存在则做标记。最后把未做标记的名字删除再删除空隙即可,整个过程十分繁琐,而且若总名单有千万个名字则工作量非常大。因此该工作很适合用Python辅助自动化

Python实现

第一步是导入需要的库并把路径设置好,我还是习惯用函数定位到桌面上利于复用

import osimport pandas as pdimport numpy as np

def GetDesktopPath():    return os.path.join(os.path.expanduser("~"), 'Desktop')

path = GetDesktopPath() + '\\data\\'

接着读取两份文件

df1 = pd.read_excel(path + '总名单.xlsx',encoding = 'utf-8',sheet_name = 0,skiprows=1)df2 = df1.iloc[:,1:23]

df3 = pd.read_excel(path + '新名单.xlsx',encoding = 'utf-8',sheet_name = 0)

接下来是根据新名单中出现的名字找各自在总表中的分组,思路是用np.where,如下所示

np.where(df2 == '死神板')# (array([7], dtype=int64), array([5], dtype=int64))

返回元组,行列信息都在里面,那么用如下命令即可获得口袋妖怪“死神板”所在的分组

col = np.where(df2 == '死神板')[1][0]df2.columns[col]# 'F组'

有了个思路就可以写个函数,并用apply逐个运用到新名单里的名字上

这里要注意,新名单中的名字在总名单中可能没有,因此需要判断后再取最里面一层数字,否则会出错

def find(x):    results = np.where(df2 == x)[1]    try:         return df2.columns[results[0]]    except:        return '未分组'

df3['备注'] = df3['最新名单'].apply(find)

接下来这个操作就是根据分组把上面的数据框“劈开”

results_lst = []for index,i in enumerate(df2.columns):    results = df3.iloc[np.where(df3['备注']==i)[0].tolist(),0]    # 重置索引很重要,为什么重要往下看    results = results.reset_index(drop=True)    results_lst.append(results)results_lst

可以看到,结果是一个Series列表,这不正好是pd.concat的对象嘛,由于接下来要横向合并,因此每个Series需要重置索引保证都是从0开始

df_final = pd.concat(results_lst,axis=1)# 记得把列名还原df_final.columns = df2.columns

整个需求就大致完成了 (两个非口袋妖怪的生物也被识别出来了)

df_final.to_excel(f'{path}整理后表格.xlsx',            encoding='gbk', # 编码不一定是gbk            index=False,            header=True)

最后就是保存并将结果以excel形式输出,如上图所示,我们就使用Python成功完成了一次Excel非对称表格的自动更新,接下来应该使用openpyxl进行样式的修改,而这一部分在之前的文章中有很详细的讲解,本文就不再展开。

注1:本文使用的数据与源码可在后台回复0608获取

注2:Python办公自动化系列旨在用Python解决工作中的繁琐操作,如果你有相关需求可在后台给我留言,我们会无偿为你解决并分享!

往期精选(?猛戳可查看)

还想了解更多干货?

关注早起Python,查看更多精彩文章

觉得这篇文章还不错?点亮「在看」鼓励一下早起!

- THE END-

np合并 python_Python办公自动化自动更新不对称表格相关推荐

  1. Python办公自动化(七)|自动更新不对称表格

    需求分析 现在我们有类似如下一份记录了口袋妖怪名字的分组名单:(未全部展示,实际有A-U组+1个"未分组") 现在有一份更新的名单(仅含名字) 需要根据这份新名单对原来的总表进行更 ...

  2. 【已解决】Word转换PDF时自动更新域导致图片表格的引用编号全部乱掉

    问题背景 最近在排版毕业设计,因为有很多图片和表格,为了省事,直接在文中引用图片,表格,就不用编号了,(这个时候文章的一级标题是'第1章'),但是学校要求一级标题的格式为"第一章" ...

  3. exists的用法 python_Python 办公自动化自动整理文件,一键完成!

    大家好,又到了 Python 办公自动化专题,本文跟大家分享一个文件整理脚本的实现过程. 具体的功能很简单,给定一个打算整理的文件夹目录,这个脚本可以将该目录下的 所有文件 都揪出来,并且根据后缀名归 ...

  4. excel数据处理_excel数据处理技巧:快速引用数据,制作自动更新的通报表格

    编按:哈喽,大家好!如何快速做好每日业绩通报?如果每次都要重新输入日期.手动整理计算数据,那不但太费时间了而且还容易出错.今天苗老师要和大家分享一张全自动的Excel业绩通报表,解放你的双手.双眼!学 ...

  5. 自动设置图片的序号_word表格技巧:如何在表格中填充序号并能自动更新

    在excel要为行列添加序号是相当轻松的事儿--先手动添加两个,然后选中一拖就好了:可是在word中这个方法是不存在的,当然方法还是有的,并且还可以根据删除和插入行的动作而自动更新. -------- ...

  6. axure 8 表格合并_Python办公自动化(六)|自动更新表格,告别繁琐

    今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就是每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第一张sheet 汇总表的更新,大概就是这样 当然实 ...

  7. easyui数据表格重置_Python办公自动化,自动更新表格,告别繁琐

    大家好,又到了Python办公自动化专题 . 今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就 是 每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第 ...

  8. Python办公自动化,自动更新表格,告别繁琐!

    大家好,又到了Python办公自动化专题 . 今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就 是 每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第 ...

  9. python自动更新excel_Python办公自动化|自动更新表格,告别繁琐

    大家好,又到了Python办公自动化专题.今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就是每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第一张sh ...

  10. python自动更新excel_Python办公自动化(六)|自动更新表格,告别繁琐

    今天我们讲解的案例是如何使用Python自动更新Excel表格,简单来说就是每天都会对Excel中多个sheet进行更新,需要操作完后可以用程序完成第一张sheet 汇总表的更新,大概就是这样 当然实 ...

最新文章

  1. linux下单节点oracle数据库间ogg搭建
  2. git---gui使用
  3. 常用算法 之一 详解 MD5 实现(基于算法的官方原文档)及源码详细注释
  4. P多行溢出省略号的处理
  5. 修改已存在用户的所属组(usermod用法)
  6. 准确性 敏感性 特异性_如何掌握类型特异性的艺术
  7. mysql批量查询版本号最大的_mysql子查询批量找id最大的
  8. mysql类似的数据库_MemSQL学习笔记-类似MySQL的数据库
  9. 第八课 魔棒 画笔工具和铅笔工具
  10. 珍惜平时一点一滴,这几个值得跟进学习的阿里、滴滴、微软超级牛人的公众号!...
  11. java 线程中断的方法_Java中断线程的方法
  12. python 爬虫代码实例
  13. 见证取样员考试题库及答案
  14. 代码review神器Upsource,让你快乐的进行CodeReview
  15. 鸿蒙系统如何设置字体,图解鸿蒙OS独特的字体系统!
  16. 计算机 调剂 学校,考研调剂应该怎样联系学校?这三点一定要注意
  17. 五险一金,终于懂了!
  18. Mendix开发不卡壳之 Scheduler Event定时任务使用
  19. shp转osm格式——道路文件格式转换
  20. Android 高德地图中路线规划绘制界面线路

热门文章

  1. 【转载】著名黑客雷蒙评价几种编程语言
  2. HDUOJ----2063过山车
  3. ASP.NET中进行消息处理(MSMQ) 一 (转)
  4. 关于数据分析师的4个你问我答,你曾有过这些困扰吗?
  5. 数据可视化—如何利用R,制作DashBoard
  6. R|数据处理|list的转化与转置
  7. elasticsearch sql插件 2.4及以下版本配置
  8. docker 容器通过桥接方式绑定到宿主机无法访问另外一个docker容器
  9. Mad Libs 游戏
  10. 用Kotlin开发Android的Hello Kotlin!!