近日发现工作中有一项任务需要高频率地对表格进行处理,涉及到数据筛选和匹配的过程,这类工作机械化、重复性高、过程无意义,因此考虑用pandas来固化这一操作过程,提升工作效率。
先介绍一下背景。部门产品有两个品牌,每个品牌底下涉及的机型很多,各机型之间的能力差异(拥有的功能及规格)通过一个表格(能力集)来控制,能力集中包含各功能模块及其子项,有好几百项。
而每年新产品发布都会新增不少机型,这些机型都对应对标部分已有的机型,即新机型的能力必须不低于对标老机型的能力。目前的测试方法为黑盒测试,测试人员没有章法、没有统一测试环节,发现问题常常是误打误撞,甚至可能在SIT阶段才发现能力集问题。为了改变这一情况,团队决定通过白盒方式,比较能力集表格中新老机型的差异、匹配到对应的模块负责人来统一测试,由于每个测试版本开发都可能不断优化产品能力,因此该表格虽然结构不变,但数值可能会有变化,需要定期检查,各模块测试人员参考比对结果有目的地进行测试。每发布一个测试版本都对一个几百*几百的表格进行机械化地操作,不如考虑用pandas来处理,减少表格操作时间、提升效率。
输入(以下数据内容均为构造)
1、能力集表格(test_capability.csv)
test_capability.csv2、模块-对应测试人员表格(module_tester.csv)
module_tester.csv3、需要比对的机型列表(直接在代码中修改)
#想要比较的目标机型
cols = [['BrandA110E','BrandA115E'],['BrandB2333','BrandB2333E']]
输出
1、差异比对表格(diff.xlsx),其中每一个表单对应一对机型比对的差异结果,且匹配了对应的模块负责的测试人员
diff.xlsx需要引入的包:
# -*- coding: utf-8 -*-
import csv
import numpy as np
import pandas as pd
比对机型差异函数get_diff(col_names,df,testers):
涉及最基础的pandas对数据框的操作(取数据、新建空dataframe、追加值)
比对机型差异函数get_diff(col_names,df,testers)其中调用了匹配模块对应测试负责人的函数match_testers:
涉及dataframe的匹配pd.merge和排序df.sort_values,类似sql的join和sort:
匹配模块对应测试负责人的函数match_testers主函数:
涉及用pandas进行csv读取及写入到一个excel的多个表单
主函数附:pandas cheatsheet
网友评论