系列导读

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. 单片机原理,单片机能做什么?
  2. Scrum看板工具Leangoo脑图实现影响地图
  3. access mysql 同步_使ACCESS数据库保持同步
  4. Linux 文件系统详解
  5. 不用现有方法,把string转换成int型[C#]
  6. 【Linux】一步一步学Linux——env命令(201)
  7. 热敏电阻温度特性曲线_热敏电阻与体温计的应用关系
  8. 截屏没有了_华为手机居然有6种截屏花招,很多人不知道,你会用哪几种?
  9. jvm形象简介之一看就懂
  10. Shell 编程基础之 Case 练习
  11. 一个字符串排列的小算法
  12. java根据模板生成word文档_Python办公自动化:使用python来自动生成word文档
  13. 为什么文本文件以换行符结尾?
  14. 【数据结构笔记33】C实现:希尔排序、增量序列
  15. python 笔记数据类型
  16. 2014.9.20CSS样式表
  17. 创建一个urdf机器人_ROS机器人Diego 1#制作(十六)创建机器人的urdf模型描述文件详解...
  18. BUUCTF 每日打卡 2021-8-11
  19. mysql reopen table_【MySql】关于临时表cann't reopen
  20. 文本相似度:A Survey of Text Similarity Approaches

热门文章

  1. 代码性能JavaScript性能优化总结
  2. 选择尽可能多的不相交区间
  3. The rxfastforest algorithm case of kaggle
  4. k8s数据持久化实验
  5. Python学习1——语法
  6. json处理为字符串,主要函数,dumps和loads
  7. JS 创建对象方法
  8. HTML5之语义化标签
  9. Android用户界面 UI组件--AdapterView及其子类(一) ListView及各种Adapter详解
  10. 14个新鲜的免费图标集