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

遍历Excel工作表并将处理结果写入对应独立工作表

问题解答与代码修正

原代码的核心问题

  1. 循环逻辑错误:你直接对字典my_dfs操作列(比如my_dfs['Name']),但my_dfs的键是工作表名称,不是DataFrame的列名,正确做法是遍历字典的键值对,拿到每个工作表对应的DataFrame再操作。
  2. 冗余库导入:你导入的openpyxl、numpy、xlsxwriter等库在当前需求中完全不需要,pandas本身就能完成读取、处理、写入全流程。
  3. 列插入位置混淆:DataFrame的列索引从0开始,若要插入到第四列(从1开始计数),对应的索引是3,而非你写的4。

修正后的完整代码

import pandas as pd

# 读取Excel文件,所有工作表存入字典(键=工作表名,值=DataFrame)
my_file = r'\\user\Desktop\my_excel_file.xlsx'
my_dfs = pd.read_excel(my_file, sheet_name=None, skiprows=2)

# 遍历每个工作表,执行数据处理
for sheet_name, df in my_dfs.items():
    # 合并第二列(Name)和第三列(Surname)为新列
    df['concatenation'] = df['Name'].astype(str) + df['Surname'].astype(str)
    # 将新列插入到第四列(索引3,对应从1开始的第四列)
    column_to_move = df.pop('concatenation')
    df.insert(3, 'concatenation', column_to_move)

# 将处理后的所有工作表写入新Excel文件,保留原工作表名
with pd.ExcelWriter(r'\\user\Desktop\处理后的文件.xlsx') as writer:
    for sheet_name, df in my_dfs.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

关键知识点说明

  • 读取多工作表:pd.read_excel(..., sheet_name=None)会自动将所有工作表转为字典,键是工作表名称,值是对应DataFrame,这是处理多工作表的标准方式。
  • 遍历字典键值对:用for sheet_name, df in my_dfs.items()可以同时拿到工作表名和对应的DataFrame,操作更直观,避免字典索引错误。
  • 列合并优化:用astype(str)替代map(str),是Pandas中更高效的类型转换方式,确保两列都转为字符串后再拼接。
  • 写入多工作表:pd.ExcelWriter配合循环写入,能一次性将所有处理后的DataFrame写入同一个Excel文件,且保留原工作表名称;index=False避免写入时自动添加行索引列。

额外建议

  • 如果合并列需要分隔符(比如空格),可以修改拼接逻辑:df['concatenation'] = df['Name'].astype(str) + ' ' + df['Surname'].astype(str)
  • 若担心列名拼写错误,可以先打印每个DataFrame的列名确认:print(df.columns)
  • 处理大文件时,pd.read_excel可以指定usecols参数只读取需要的列,提升效率。

内容的提问来源于stack exchange,提问作者machukovich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:33:29