|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
这几天学了一点Python,现整理如下:
- import xlwings as xw
- #先安装第三方软件包xlwings,方法有两种:
- #1 文件-设置-项目-python解释器-点+号-搜索框输入软件包名称xlwings-安装
- #2 打开电脑dos环境,输入pip install xlwings,回车等待安装完成
- app=xw.App(visible=True,add_book=False)
- # 打开Excel程序
- # 注意Python区分大小写,变量可以不用先定义
- wb=app.books.add()
- # 新建Excel工作簿,先新建后面再保存
- sht=wb.sheets['sheet1']#激活工作表
- # sht=wb.sheets.active
- # sht=wb.sheets[0]
- sht.range('a2').value=[1,'2024-4-18',3]
- sht.range('a1').value=['序号','日期','天猫']
- # 以上是写入一行数据示例
- list1=[2,3,4,5]
- sht.range('a3').options(transpose=True).value=list1
- # 写入一列,把列表数据装入变量list1,再赋值给单元格a3
- # 也可以把单元格区域赋值给变量,再把变量赋值给某单元格,
- # 例如:list2=sht.range('k2:m9').value sht.range('a2').value=list2
- wb.save(r'D:\python学习\表1.xlsx')
- # 指定路径保存并命名工作簿
- wb.close()
- # 关闭工作簿
- app.quit()
- # 退出Excel程序
复制代码- import xlwings as xw
- app=xw.App(visible=True,add_book=False)
- path_1=r'D:\python学习\表1.xlsx'
- wb=app.books.open(path_1)# 打开现有工作簿
- sht=wb.sheets.active
- sht1=wb.sheets.add('2月',after=sht) # 新建工作表并直接命名,放在sht后面
- # sht1=wb.sheets.add()# 新建工作表,放在最前面
- list1=wb.sheets['1月'].range('a1:c12').value
- sht1.range('a1').value=list1
- sht1.autofit() # 自动调整单元格大小
- # for i in [1,2,3,4,[1,2,3]]:
- # print(i)
复制代码- import xlwings as xw
- app=xw.App(visible=True,add_book=False)
- lujin='D:\python学习'
- for i in range(2,21):
- wb=app.books.add()
- wb.save(f'D:\python学习\shuju{i}.xlsx')
- # 批量建20个工作簿并命名、保存,range(2,21)区间为左闭右开,即从2开始到21共20个
- # 用f-string方法来拼接字符串
- # 以f或F为修饰符引领字符串,变量用{}
- # 例如 wb.save(f'{lujin}\表{i}.xlsx'),也达到一样效果
- wb.close()
- app.quit()
复制代码- import xlwings as xw
- import os
- import pandas as pd
- # 导入库,os是标准库
- # 导入pandas库
- lujin='D:\python学习'
- list1=os.listdir(lujin)
- # 获取路径下文件、子文件的文件名
- app=xw.App(visible=True,add_book=False)
- for i in list1:
- print(i)
- wb=app.books.open(lujin+'\\'+i)
- # 依次打开所以工作簿
- sht=wb.sheets['sheet1']
- sht.range('a1').value=['班级','姓名','语文','数学','英语']
- sht.range('a2').value=['高3-1','许仙','98','100','88']
- sht.range('a3').value=['高3-1','天一','95','99','90']
- sht.range('a4').value=['高3-2','炸蛇','92','90','90']
- sht.autofit()
- wb.save()
- wb.close()
- app.quit()
复制代码- # 列表基础
- a=[1,2,3,4,'hello',[5,6,7]]
- # 这是列表,由元素组成,列表=[元素1,元素2,元素3,......],列表可以嵌套列表
- for i in a:
- print(i)
- # 由for循环列出列表a的每一个元素
- b=a[1:4] # 这就是所谓的列表切片:取列表的多个元素
- '''
- 这是多行注释的写法
- 列表b取值a的第1个到第4个元素,也就是2,3,4
- 为什么是这样?因为列表取值默认是从0开始的,右边是4,只能取到第3个
- '''
- for i in b:
- print(i)
- # 当不确定列表元素的序号时,可以只写一个序号
- b=a[1:] # 从第2个到最后
- for i in b:
- print(i)
- # 运行结果:2,3,4,'hello',[5,6,7]
- b=a[-3:] # 倒数第3个到最后
- for i in b:
- print(i)
- # 运行结果:4,'hello',[5,6,7]
- b=a[:-3] # 到数第3个到最前,不包括倒数第3个
- for i in b:
- print(i)
- # 运行结果:1,2,3
- a.append(1000) # 用appden()函数向列表添加元素,一次只能1个
- a.append(100)
- print(a)
- # 运行结果:[1, 2, 3, 4, 'hello', [5, 6, 7], 1000, 100]
- a=[1,2,3,4,5,'hello']
- # b="-".join(a)
- # print(b) # 很奇怪,这里开始报错、不运行
- # 用join()函数将列表a转换为用-连接的字符串
- b='-'.join('%s'%id for id in a)
- print(b)
- # 改成这样才能运行,因为:a里面数据不全部是字符串类型str,所以报错
- # 运行结果:1-2-3-4-5-hello
- c='nihao mao hello www'
- print(c.split(' '))
- # split()函数是将字符串拆分成列表
- # 运行结果:['nihao', 'mao', 'hello', 'www']
复制代码- import numpy as np
- import pandas as pd
- # import xlrd ,xlrd必须安装1.2.0版本,最新版本2.0.1不支持xlsx,会报错,坑了好久
- # 导入pandas模块
- # pandas主要是处理数据
- lujin = 'D:\python学习'
- frame=pd.read_excel(lujin+'\\'+'表2.xlsx') # 这是用变量的写法
- # usecols=['姓名','班级'],读取特定列;usecols=[0,1,2],读取前3列,也可以这样usecols='a:c'
- # nrows=2,读取前2行
- # skiprows=2,跳过前2行;skiprows=lambda x: x % 2 == 0,跳过偶数行
- # header=1,用第2行做表头,即第1行不要了,header=None表示不使用数据源中的表头
- # names=['aa','ss','dd','ff','gg'],自定义表头
- # frame=pd.read_excel(r'D:\python学习\表2.xlsx')
- # 这是绝对路径的写法
- print(frame)
- feilei_sums=frame.groupby(['班级','姓名']).sum()
- # 按班级、姓名进行分组汇总各科成绩
- print(feilei_sums)
- # print(frame.groupby(['班级']).sum())
- # 数据透视表函数pivot_table():按班级统计各科总分、平均分
- toushi=frame.pivot_table(frame,index='班级',aggfunc=[np.sum,np.mean])
- print(toushi)
复制代码- import numpy as np
- import pandas as pd
- import os
- # 导入库
- lujin=r'D:\python学习'
- df_empty=pd.DataFrame(columns=['班级','姓名','语文','数学','英语'])
- # 建一个空库,列名跟数据源一样
- for parents, dirnames, filenames in os.walk(lujin):
- for filename in filenames:
- df = pd.read_excel(os.path.join(parents, filename))
- df_empty = df_empty.append(df, ignore_index=True)
- # 利用os库的walk功能遍历文件夹里的所有文件,并读取文件名字
- # os.path.join能够将文件夹的路径和文件名字合并成每个文件的完整路径
- # 然后将每个文件读取,再与空的DataFrame合并
- print(df_empty) # 输出合并表
- d=df_empty.groupby(['班级','姓名']).sum()
- print(d) # 输出汇总表
- # 按班级、姓名汇总
- print(df_empty.pivot_table(df_empty,index=['班级','姓名'],aggfunc=[np.sum]))
- # 数据透视表
- # df_empty.to_excel('分类汇总.xlsx',sheet_name='sheet1',index=False)
- # d.to_excel('分类汇总.xlsx',sheet_name='sheet2',index=True)
- with pd.ExcelWriter(lujin+'\\'+'分类汇总.xlsx') as writer:
- df_empty.to_excel(writer,sheet_name='sheet1',index=False) # 合并表写入sheet1
- d.to_excel(writer,sheet_name='sheet2',index=True) # 汇总表写入sheet2
- # pd.ExcelWriter 第一个参数路径或文件名,如果文件不存在就新建,存在就覆盖
- # 参数mode=‘a’表示新增模式,即新增sheet,不覆盖以前的sheet
复制代码 待续······
|
|