修改现有Python代码实现按Excel Revs列数值分类存储数据
适配需求的可行解决方案
你现有代码已经通过groupby("Revs")完成了按Revs字段拆分数据的核心操作,仅需补充文件夹自动创建、分组数据导出的逻辑即可,无需改动原有绘图分析的核心功能。
代码修改点
- 新增目录自动创建逻辑:提前生成按Revs值分类的子文件夹,避免保存文件时路径不存在报错
- 复用已有分组结果:
groupby返回的每一组第一个元素就是Revs的取值(0/1/2/3),直接对应你要筛选的数值 - 新增分组数据导出逻辑:每拆分完一组数据就将对应行导出到对应Revs值的子文件夹
完整可运行代码
import pandas as pd import numpy as np import os import os.path import xlsxwriter import matplotlib.pyplot as plt import six import matplotlib.backends.backend_pdf from matplotlib.gridspec import GridSpec from matplotlib.ticker import AutoMinorLocator, MultipleLocator # 请提前配置这两个全局变量 file_loc = "替换为你的Excel文件存放目录路径,结尾带/" zero = 替换为前任代码使用的校准偏移值 def CamAnalyzer(entryName): # 读取Excel文件数据存入DataFrame,header=1表示取第二行作为表头 df = pd.read_excel(str(file_loc) + str(entryName), header = 1) print(df) # --------------------------新增代码:创建分类存储目录-------------------------- result_root = os.path.join(file_loc, "Results") # Revs取值和对应名称,和原有命名规则保持一致 rev_map = { 0: "Air Vent", 1: "Inlet", 2: "Diaphram", 3: "Outlet" } # 自动创建所有需要的目录,已存在则跳过不报错 for rev_val, rev_name in rev_map.items(): rev_dir = os.path.join(result_root, f"Rev_{rev_val}_{rev_name}") os.makedirs(rev_dir, exist_ok=True) # ----------------------------------------------------------------------------- # 配置绘图样式和画布 plt.style.use('fivethirtyeight') fig = plt.figure(figsize=(17,22)) gs = GridSpec(3,2, figure=fig) props = dict(boxstyle='round', facecolor='w', alpha=1) # 按Revs字段拆分数据为4个小DataFrame dfSplit = list(df.groupby("Revs")) names = ["Air Vent","Inlet","Diaphram","Outlet"] for x, y in enumerate(dfSplit): rev_val = y[0] rev_name = names[x] dfs = y[1] # --------------------------新增代码:保存筛选后的行到对应文件夹-------------------------- dfs.to_excel( os.path.join(result_root, f"Rev_{rev_val}_{rev_name}", f"{entryName.strip('.xlsx')}_数据.xlsx"), index=False ) # ------------------------------------------------------------------------------------- # 处理测量值:去除单位转换为数值,加校准偏移 r = dfs["Measurement"].str.strip(" in") r = r.apply(pd.to_numeric) + zero/2 theta = dfs["Rads"] # 分配极坐标图子图位置 if x<2: ax = fig.add_subplot(gs[1,x],polar = True) else: ax = fig.add_subplot(gs[2,x-2],polar = True) ax.set_rlim(0,0.1) ax.plot(theta, r) ax.grid(True) ax.set_title(names[x]) # 生成4组数据叠加的总图 ax2 = fig.add_subplot(gs[0,:],polar = True) ax2.set_rlim(0,0.1) for x, y in enumerate(dfSplit): dfs = y[1] r = dfs["Measurement"].str.strip(" in") r = r.apply(pd.to_numeric) + zero/2 theta = dfs["Rads"] ax2.plot(theta, r) ax2.set_title("Sample " + str(entryName).strip(".xlsx") + " 叠加图") ax2.legend(names,bbox_to_anchor=(1.1, 1.05)) # 总图保存到根结果目录 plt.savefig(os.path.join(result_root, str(entryName).strip(".xlsx") + ".png")) plt.close() # 关闭画布释放内存 print("处理完成,结果已保存")
使用说明
- 配置开头的两个全局变量:
file_loc填Excel文件存放的根目录路径,zero沿用前任代码的校准偏移值即可 - 将需要处理的Excel文件全部放到
file_loc指向的目录下 - 调用函数
CamAnalyzer("待处理的文件名.xlsx")即可运行 - 运行完成后,
file_loc/Results目录下会生成4个分类子文件夹,分别对应Revs=0/1/2/3的筛选结果,每个子文件夹内包含对应行的Excel数据文件和分析图表
内容的提问来源于stack exchange,提问作者C. Dresser
相关产品推荐
相关产品推荐

