上QQ阅读APP看书,第一时间看更新
030 使用filter()函数转换二维工作表
此案例主要通过使用Python语言的filter()函数,从而实现将一维工作表转换为二维工作表。当运行此案例的Python代码(A312.py文件)之后,将把“收入表.xlsx”文件的一维表转换为二维表,图030-1表示转换之前的一维表,图030-2表示转换之后的二维表。
图030-1
图030-2
A312.py文件的Python代码如下:
import openpyxl myBook=openpyxl.load_workbook('收入表.xlsx') mySheet=myBook['一维表'] myRange=list(mySheet.values)[1:] myTypes=list({myCell.value:''for myCell in mySheet['B'][1:]}) #print(myTypes) myQuarters=list({myCell.value:''for myCell in mySheet['A'][1:]}) #print(myQuarters) myNewBook=openpyxl.Workbook() myNewSheet=myNewBook.active myNewSheet.title='二维表' myNewSheet.append(['季度']+ myTypes) for myQuarter in myQuarters: mySets=[(myQuarter,myType)for myType in myTypes] myNewSheet.append([myQuarter]+[list(filter(lambda myParam:myParam[0] ==mySet[0]and myParam[1]==mySet[1],myRange))[0][2]for mySet in mySets]) myNewBook.save('结果表-收入表.xlsx')
在上面这段代码中,myQuarters=list({myCell.value:'for myCell in mySheet['A'][1:]})表示通过字典清除一维表A列(季度)的重复内容,因此myQuarters包含的内容是:['1季度','2季度','3季度','4季度']。
myTypes=list({myCell.value:'for myCell in mySheet['B'][1:]})表示通过字典清除一维表B列(业务类别)的重复内容,因此myTypes包含的内容是:['家电收入','建材收入','其他收入']。
list(filter(lambda myParam:myParam[0]==mySet[0]and myParam[1]==mySet[1],myRange))[0][2]的filter()函数表示根据传入的参数myParam,对myRange范围(A2:C13)的数据进行筛选,在此即是筛选myRange每行符合mySet[0](季度)和mySet[1](业务类别)的数据。
此案例的源文件是MyCode\A312\A312.py。