Python Pandas:批量清洗Excel工作表并合并失败求助
问题分析与解决方案
你的整合代码存在几个关键错误,导致无法正常运行:
- 循环内直接覆盖了
sheets变量(原本是存储所有工作表的字典),后续循环无法获取正确的工作表数据 - 清洗操作错误地使用了空的
df对象,而非当前循环的目标工作表数据 pd.concat的使用方式有误:每次循环重新赋值会覆盖之前的合并结果,且参数应为DataFrame集合而非单个对象
修正后的完整代码
import pandas as pd # 封装单表清洗逻辑,复用你的原有代码 def clean_sheet(df): df = df.fillna('') # 合并第2、3行作为表头(iloc从0索引,对应你原代码的第2、3行) df.columns = df.iloc[1] + ' ' + df.iloc[2] # 筛选第一列为'TOTAL'的行 df = df[df.iloc[:, 0] == 'TOTAL'] # 重置索引避免合并后索引混乱 return df.reset_index(drop=True) # 读取所有工作表,返回字典:{工作表名: 对应DataFrame} sheets = pd.read_excel('Royalties 2021.xlsx', sheet_name=None) # 收集所有清洗后的工作表 cleaned_dfs = [] for _, df in sheets.items(): cleaned_df = clean_sheet(df) cleaned_dfs.append(cleaned_df) # 合并所有清洗后的DataFrame df_main = pd.concat(cleaned_dfs, ignore_index=True) print(df_main)
关键改进说明
- 将单表清洗逻辑封装为函数,提升代码可读性与复用性
- 循环遍历工作表字典的键值对,每次处理当前工作表的
df,避免覆盖原sheets变量 - 先将所有清洗后的DataFrame存入列表,最后一次性合并,避免重复赋值导致的数据丢失
- 清洗后重置索引,防止合并后出现重复索引问题
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

