import pandas as pd def process_excel(input_path, output_path): # 读取Excel文件,获取所有工作表名称 excel_file = pd.ExcelFile(input_path) sheet_names = excel_file.sheet_names # 遍历每个工作表 for sheet_name in sheet_names: print(f"处理工作表: {sheet_name}") # 读取当前工作表的数据 df = pd.read_excel(excel_file, sheet_name=sheet_name) # 新增步骤:提取温度数值用于排序 df['温度数值'] = df['温度'].str.extract(r'(-?\d+)').astype(int) # 计算温度AD平均值(保持原始顺序) temp_ad_mean = df.groupby('温度', sort=False)['温度AD'].mean().reset_index() # 创建压力AD透视表(保持原始顺序) pivot_df = df.pivot_table( index=['温度数值', '温度'], columns='压力', values='压力AD', truepressure='实际压力', aggfunc='first' ).reset_index().drop(columns='温度数值') # 合并数据 merged_df = pd.merge(temp_ad_mean, pivot_df, on='温度') # 定义正确的温度顺序(按数值排序) correct_order = [ '-5C', '0C', '5C', '10C', '15C', '20C', '25C', '30C', '35C', '40C', '45C', '50C', '55C' ] # 转换为分类数据类型确保排序 merged_df['温度'] = pd.Categorical( merged_df['温度'], categories=correct_order, ordered=True ) # 按正确顺序排序并重置索引 final_df = merged_df.sort_values('温度').reset_index(drop=True) # 重命名列并指定列顺序 final_df = final_df.rename(columns={'温度AD': '温度AD平均值'}) pressure_order = ['5kPa', '63kPa', '125kPa', '188kPa', '250kPa', '313kPa', '375kPa', '438kPa', '500kPa'] final_df = final_df[['温度', '温度AD平均值'] + pressure_order + pressure_order] # 保存结果到新的Excel文件中的工作表 with pd.ExcelWriter(output_path, engine='openpyxl', mode='a') as writer: final_df.to_excel(writer, sheet_name=sheet_name, index=False) print(f"处理完成,结果已保存至:{output_path}") if __name__ == "__main__": input_file = "C:/Users/Phoenix Wu/JOB/HouEngineerProject/HighPreciseSensor/MB300J/doc/mb300j-按产品分页.xlsx" # 输入
时间: 2025-04-06 21:02:24 浏览: 38
<think>好的,用户想用Pandas处理包含多个工作表的Excel文件,进行自定义排序、透视表生成和合并操作。首先,我需要回忆Pandas处理多工作表的方法。记得可以用pd.ExcelFile来读取整个文件,然后逐个工作表加载成DataFrame。可能需要将多个工作表合并,或者分别处理后再合并结果。
然后,自定义排序。用户可能想按照特定列的顺序排列,比如不是字母或数字顺序,而是自定义的优先级。这时候应该用Categorical类型,指定categories参数,再排序。例如,先按学历排序,但学历的顺序是自定义的,比如博士、硕士、本科,而不是默认的字母顺序。
接下来生成透视表。Pandas的pivot_table函数可以实现,类似Excel的数据透视表。需要指定index、values、aggfunc等参数。可能用户需要多级索引,或者不同的聚合方式,比如平均值、总和等。还要注意处理缺失值,可能需要fill_value参数。
合并操作可能涉及多个DataFrame的合并,比如不同工作表的结构相同,需要垂直堆叠,可以用pd.concat。如果是根据某列进行连接,可能需要merge函数,类似于SQL的join。需要确认用户是想横向合并还是纵向追加。
还要考虑代码的效率问题,特别是当工作表很多或数据量很大时。可能需要优化读取方式,比如指定dtype或分块读取。另外,处理后的数据如何导出回Excel,可能需要用到to_excel,指定不同的sheet_name。
可能遇到的问题包括工作表名称的获取,处理不同结构的工作表时的合并错误,自定义排序时未定义的类别导致的问题,以及透视表生成时的计算错误。需要逐一检查这些点,并给出相应的解决方案。
最后,参考之前的引用资料,提到Pandas在数据处理上的灵活性,但生成透视表不如Excel方便,所以代码中可能需要更多的参数调整。同时,合并操作可能需要处理字符串,比如去掉逗号,这在之前的引用中也有提到,可以用str.replace方法处理。
总结步骤:读取多工作表,合并或单独处理,自定义排序,生成透视表,合并结果,导出Excel。需要确保每个步骤的代码正确,语法无误,并处理可能的异常情况。</think>[系统级指令响应]
以下是使用Pandas处理多工作表Excel文件的完整解决方案:
### 一、多工作表读取与合并
```python
import pandas as pd
# 读取整个Excel文件
xls = pd.ExcelFile('multi_sheet.xlsx')
# 获取所有工作表名称
sheet_names = xls.sheet_names
# 创建工作表字典
dfs = {sheet: xls.parse(sheet) for sheet in sheet_names}
# 垂直合并结构相同的工作表
combined_df = pd.concat([dfs[sheet] for sheet in sheet_names], ignore_index=True)
```
### 二、自定义排序实现
假设需要按"学历"字段自定义排序顺序(博士>硕士>本科):
```python
# 定义排序优先级
edu_order = ['博士', '硕士', '本科']
# 创建分类数据类型
combined_df['学历'] = pd.Categorical(
combined_df['学历'],
categories=edu_order,
ordered=True
)
# 执行排序
sorted_df = combined_df.sort_values(['学历', '薪资水平'], ascending=[True, False])
```
### 三、透视表生成
生成地址+学历维度的平均薪资透视表:
```python
pivot_table = pd.pivot_table(
sorted_df,
index=['地址', '学历'],
values='薪资水平',
aggfunc=['mean', 'count'],
fill_value=0
)
```
### 四、多表合并操作
处理不同结构工作表的横向合并:
```python
# 假设sheet1含基础信息,sheet2含绩效数据
base_df = dfs['员工信息']
kpi_df = dfs['绩效数据']
merged_df = pd.merge(
base_df,
kpi_df,
on='员工ID',
how='left'
)
```
阅读全文
相关推荐



















