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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:58