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 图表的第二个数值轴标题。
posted @   Ivan丶ky  阅读(226)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示