You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:03