需求分析

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

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

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

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

Python实现

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

import os
import pandas as pd
import numpy as npdef 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', # 编码不一定是gbkindex=False,header=True)

参考链接 :
Python办公自动化(七)|自动更新不对称表格 : https://mp.weixin.qq.com/s/3Gc1z7QhLULpYentl-o0Hw

Python办公自动化(七)|自动更新不对称表格相关推荐

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

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

  2. 利用python和Tushare自动更新A股每日数据

    利用python和Tushare自动更新A股每日数据 tushare ID :423004 所需接口 整体思路为: 1.利用stock_basic获取ts_code,获得沪深全部上市公司股票代码 2. ...

  3. gdb -iex_如何使用IEX Cloud,Matplotlib和AWS在Python中创建自动更新数据可视化

    gdb -iex Python is an excellent programming language for creating data visualizations. Python是用于创建数据 ...

  4. python+pyinstaller+OOS自动更新(2) 文件遍历创建filehash.txt

    python+pyinstaller+OOS自动更新2 文件遍历创建filehash.txt 遍历文件 获取文件的md5 /tool_getFilehash.py的所有代码 这时就可以打包tool_g ...

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

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

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

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

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

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

  8. python 合并excel 自动更新_手把手教你4种方法用Python批量实现多Excel多Sheet合并

    一.前言 大家好,我是崔艳飞.前两天给大家分享了Python自动化文章:手把手教你利用Python轻松拆分Excel为多个CSV文件,而后在Python进阶交流群里边有读者遇到一个问题,他有很多个Ex ...

  9. Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」

    前言 本次分享的是小编经过多日编写的关于自动检测B站Up主视频更新情况,并发送邮件提醒更新的Python程序,代码不专业.部分代码段借鉴网上,仅供参考娱乐! 用到的库 selenium. _threa ...

最新文章

  1. 在OpenCV下写的直方图匹配(直方图规定化)C++源码!
  2. 几何视角看线性方程组解的情况
  3. 陆金所 CAT 优化实践
  4. 源码读不会,小白两行泪!
  5. Electron中通过globalShortcut实现监听键盘事件进而实现快捷键功能
  6. ORACLE TEXT DATASTORE PREFERENCE(四)
  7. python tkinter详解 博客园_python tkinter-布局
  8. java ReentrantLock 锁相关笔记
  9. 情怀真的可以吃~致文青
  10. Convert Windows 32bit dirver to Windows 64bit
  11. Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag
  12. Python 崛起、JavaScript 制霸 —— GitHub 2017 年度开源报告里的语言之争
  13. 第一步_安装VMware虚拟机和搭载ubuntu系统
  14. python第五十二课--自定义异常类
  15. 移动通信(Mobile Communication)
  16. U盘无法格式化的原因及解决方法
  17. Python - global 跨函数参数传递
  18. 虚拟 DOM 是什么? 有什么优缺点?
  19. trove mysql 镜像_trove 基于 centos7 制作 mysql5.5 镜像
  20. win10右键卡顿原因_win10系统点击鼠标右键出现卡顿的解决方法

热门文章

  1. python修改散点图中点的颜色_如何在seaborn散点图中更改点边颜色?
  2. xmarin.android导航栏,Xamarin.Forms中心标题和透明导航栏 - Android
  3. 太赫兹芯片是什么原理_太赫兹微芯片速度可提升100倍 却遭遇研发两大挑战
  4. 2013年美国国情咨文总结
  5. Kubernetes之持久化存储
  6. springboot项目执行controller方法时进入慢的问题
  7. 模块化配电系统在高密度数据中心的应用
  8. CLOSE_WAIT状态的原因与解决方法(2)
  9. vc++6.0工具栏自绘按钮程序
  10. UnboundLocalError: local vaiable 'XX' reference...