想做一个【多excel匹配合并成为一张excel表】的自动化功能,人工匹配耗时耗力。
先废话:
做运维的,居然被资源统计搞得头疼眼瞎的,也是日了狗了。遂搞了个这个,化两个人一下午都搞不完的东西为一小时之内,考虑到数据出来了还要修改啥的,1h足够了。ok,进入正题。
工具:Jupiter notebook
需要的包:pandas
以下为正文:
1、导包
import pandas as pd
2、读取表格:
df = pd.read_excel("虚拟机资源统计报表.xls",sheet_name='xx表')
df为主表,大多数字段(虚拟机名称、CPU利用率等)里面都有,缺少的字段(申请时间)在df_表.
df_表为补充表。我对补充表做了数据处理:将多个标签合并为一个,其时间由新->旧。。。。。。需要注意的是,当匹配多个结果,我选择查询到的第一个结果,即最新的结果
3、创建自己的表格mydf,用来保存最终结果
# 把需要的字段拿出来
mydf = pd.DataFrame(columns = ["虚拟机名称", "CPU配置(核)", "CPU使用率(%)", "子系统", "申请时间"])
4、把主表df能用的数据先考到最终表mydf中
mydf["虚拟机名称"]=df['虚拟机名称']
mydf["CPU配置(核)"]=df['CPU配置(核)']
mydf["CPU使用率(%)"]=df['CPU使用率(%)']
mydf["子系统"]=df['子系统']
5、合并表格
# 合并两张表,为主表缺少的字段“申请时间”字段赋值
for i in mydf["虚拟机名称"]:
# a类型为Series,Series类型包括index和values两部分
a=df_["虚机申请时间(必填)"][df_["虚机名称"] == i]
b=a.values #返回一个多维数组numpy对象
if(len(b)>0):
mydf["申请时间"][mydf['虚拟机名称'] == i] = b[0]
else:
mydf["申请时间"][mydf['虚拟机名称'] == i] = "" #没查到的都置空
6、数据导出
mydf.to_excel("mydf.xls") #导出数据到Excel文件
7、结果很惊喜~