Skill Steps
This sub-skill covers one capability of the Excel workflow. For reading/counting/Parquet optimization, see the parent workflow SKILL.md.
Step1 Filter the specified group data, convert the target column to numeric type and calculate the average.
group_col = '班级' # 占位示例
target_group_value = '358' # 占位示例
target_cols = ['总分', '理数'] # 占位示例
if group_col not in df_analysis.columns:
raise ValueError(f"数据中缺少'{group_col}'列。")
df_analysis[group_col] = df_analysis[group_col].astype(str)
filtered_df = df_analysis[df_analysis[group_col] == target_group_value]
avg_scores = {} for col in target_cols: if col not in filtered_df.columns: raise ValueError(f"The data is missing the '{col}' column.") try: filtered_df[col] = pd.to_numeric(filtered_df[col], errors='raise') avg_scores[f'Average {col}'] = filtered_df[col].mean() except Exception as e: raise ValueError(f"Column '{col}' cannot be converted to numeric type: {str(e)}")
output("Filtered result statistics: " + str(avg_scores))
Step2 对于小文件,从特定 Sheet 的指定行区间提取目标字段,去重后计算总和。
```python
unique_components = {}
total_power = 0
if total_rows < 10000:
target_sheet = 'Sheet2' # 占位示例
df_sheet2 = pd.read_excel(file_path, sheet_name=target_sheet)
extracted_data = []
# 提取区间1 (例如 21-28行)
for i in range(21, 29):
if i < len(df_sheet2):
row = df_sheet2.iloc[i]
component = row.iloc[0]
power = row.iloc[6]
if pd.notna(component) and pd.notna(power):
try:
extracted_data.append({'Component': component, 'Value': float(power)})
except:
pass
# 提取区间2 (例如 51-58行)
for i in range(51, 59):
if i < len(df_sheet2):
row = df_sheet2.iloc[i]
component = row.iloc[0]
power = row.iloc[1]
if pd.notna(component) and pd.notna(power):
try:
extracted_data.append({'Component': component, 'Value': float(power)})
except:
pass
# 合并并去重 (保留首次出现的值)
for item in extracted_data:
name = item['Component']
val = item['Value']
if name not in unique_components:
unique_components[name] = val
total_power = sum(unique_components.values())
Step3 Save the calculation results, filtered data, and statistical information as an Excel file, and generate a local download link.
import os
# 保存区间提取与汇总结果
if total_rows < 10000:
result_df = pd.DataFrame([
{'Component Name': name, 'Est. Power (kW)': power}
for name, power in unique_components.items()
])
total_row = pd.DataFrame([{'Component Name': '合计', 'Est. Power (kW)': total_power}])
result_df = pd.concat([result_df, total_row], ignore_index=True)
output_path_power = "output_power_sum.xlsx"
result_df.to_excel(output_path_power, index=False)
output(f"功率计算结果已保存。下载链接: file://{os.path.abspath(output_path_power)}")
# 保存筛选与统计结果
output_path_analysis = "output_analysis_result.xlsx"
with pd.ExcelWriter(output_path_analysis, engine='openpyxl') as writer:
filtered_df.to_excel(writer, sheet_name="筛选数据", index=False)
pd.DataFrame([avg_scores]).to_excel(writer, sheet_name="统计信息", index=False)
output(f"分析完成,结果已保存。下载链接: file://{os.path.abspath(output_path_analysis)}")