python 之 2022年3月总结 -- Excel表数据分析、汇总、建图
python 之 三月总结
这个月主要搞得是一个数据分析excel汇总,并编辑excel图表。
第一步:数据复制备份
import os
def mycopyfile(srcfile, dstfile):
if not os.path.isfile(srcfile):
print("%s not exist!" % (srcfile)) # 无文件提示
else:
fpath, fname = os.path.split(dstfile) # 分离文件名和路径
if not os.path.exists(fpath):
os.makedirs(fpath) # 创建路径
shutil.copyfile(srcfile, dstfile) # 复制文件
print("copy %s -> %s" % (srcfile, dstfile))
第二步:读取数据,按某个条件分表
数据量一大,这种方式就比较慢。如有更好得方法,欢迎指导!
import pandas as pd
import xlwings as xw
app = xw.App(visible=True, add_book=False)
wb = app.books.open(xian_file) # 读入已有工作簿
sht = wb.sheets[0] # 引用活动sheet
info = sht.used_range # 读取所有内容
data = info.options(pd.DataFrame, expand='table',encoding='gbk').value # 转为danpas格式
data = data.reset_index() # 重置列索引
rows = data.shape[0] # 获取行数 shape[1]获取列数
wb.close()
app.kill()
namelist = [] # 姓名列表
for name_row in range(0, rows):
name = data["姓名"][name_row]
if name not in namelist:
namelist.append(name)
for name in namelist:
new_df = pd.DataFrame()
for Data_row in range(0, rows):
if data["姓名"][Data_row] == name:
new_df = pd.concat([new_df, data.iloc[[Data_row], :]],axis=0, ignore_index=True)
new_df.to_excel(str(name)+'.xlsx',index=False) # 按姓名,进行整合表
第三步:涉及到一个汇总某列值的和
sum = "%.2f" % (data['金额'].sum()) # 汇总data表中金额的合计
第四步:合并多个dataframe到excel
import pandas as pd
writer = pd.ExcelWriter(r'abc.xlsx')
data.to_excel(writer, sheet_name='sheet1', index=False)
data_2.to_excel(writer, sheet_name='sheet2', index=False)
data_3.to_excel(writer, sheet_name='sheet3', index=False)
data_4.to_excel(writer, sheet_name='sheet4', index=False)
writer.save()
writer.close()
第五步:读取一个带密码的Excel
这个我单独有写一篇将windows操作excel的文章,win32操作特别注意大小写不能乱
地址:
https://www.cnblogs.com/IvanKK/p/16054211.html
也可以参考官方文档:
https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel
import win32com.client
xlsApp = win32com.client.Dispatch("Excel.Application")
xlsApp.Visible = True # true打开excel程序界面
xlsApp.DisplayAlerts = False # 禁止弹窗-不显示警告信息
xlBook = xlsApp.Workbooks.Open(r'abc.excel', UpdateLinks=False, ReadOnly=False, Format=None, Password='password', WriteResPassword='password') # 前一个为打开密码 后一个为编辑密码
xlBook.Save() # 切记大小写
xlBook.Close()
xlsApp.Quit()
第六步:用win32修改excel图表数据
附上官方文档
https://docs.microsoft.com/zh-cn/office/vba/api/excel.chart(object)
xlBook.Worksheets('Sheet1').Activate
xlSheet = xlBook.Worksheets('Sheet1')
chart = xlSheet.ChartObjects(1).Chart # 选取第一个chart
xlSheet.ChartObjects(1).Chart.ChartWizard(Source='=Sheet1!$A$16:$M$19') 选取A16-M19的数据
表达式.ChartWizard (Source、 Gallery、 Format、 PlotBy、 CategoryLabels、 SeriesLabels、 HasLegend、 Title、 CategoryTitle、 ValueTitle、 ExtraTitle)
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Source | 可选 | Variant | 包含新图表源数据的区域。 如果省略本参数,Microsoft Excel 将编辑活动图表工作表或活动工作表上处于选定状态的图表。 |
Gallery | 可选 | Variant | 指定图表类型的 XlChartType 常量之一。 |
Format | 可选 | Variant | 内置自动套用格式的选项编号。 可为从 1 到 10 的数字,其取值依赖于库的类型。 如果省略此参数,Excel库类型和数据源选择默认值。 |
PlotBy | 可选 | Variant | 指定每个数据系列的数据行或列中。 可以是下列的 XlRowCol 常量之一: xlRows 或 xlColumns 。 |
CategoryLabels | 可选 | Variant | 指定包含分类标签的源范围内的行数或列数的整数。 合法值为从 0(零)至小于相应分类或系列的最大个数间的某一数字。 |
SeriesLabels | 可选 | Variant | 指定包含系列标志的源范围内的行数或列数的整数。 合法值为从 0(零)至小于相应分类或系列的最大个数间的某一数字。 |
HasLegend | 可选 | Variant | 真 要包含一个图例。 |
Title | 可选 | Variant | 图表标题文本。 |
CategoryTitle | 可选 | Variant | 分类轴标题文本。 |
ValueTitle | 可选 | Variant | 数值轴标题文本。 |
ExtraTitle | 可选 | Variant | 3D 图表的系列轴标题或 2D 图表的第二个数值轴标题。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人