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

Pandas批量合并Excel多Sheet报错AttributeError,求解决方案

批量处理Excel多Sheet并合并数据的问题

问题背景

现有两个Sheet的DataFrame数据:

import pandas as pd

sheet_1 = pd.DataFrame({'KIFRS BS / IS': ['', 'CCY Type :', 'COA Code', '11000000000'], 
                   'Unnamed: 1': ['', 'EQU', 'COA English Name', 'ABC'],
                   'Unnamed: 2': ['', '', 'Base Currency Exchange Amt.', 1000],
                   'Unnamed: 3': ['26-11-2023', '', '', ''],
                   'Unnamed: 4': ['', 'Hanoi', '', '']})
sheet_2 = pd.DataFrame({'KIFRS BS / IS': ['', 'CCY Type :', 'COA Code', '11000000000'], 
                   'Unnamed: 1': ['', 'EQU', 'COA English Name', 'ABC'],
                   'Unnamed: 2': ['', '', 'Base Currency Exchange Amt.', 1200],
                   'Unnamed: 3': ['26-11-2023', '', '', ''],
                   'Unnamed: 4': ['', 'Hochiminh', '', '']})

数据展示:

KIFRS BS / IS   Unnamed: 1  Unnamed: 2  Unnamed: 3  Unnamed: 4
0                                           26-11-2023  
1   CCY Type :  EQU                                     Hanoi
2   COA Code    COA English Name    Base Currency Exchange Amt.     
3   11000000000 ABC                 1000

期望输出合并后的DataFrame:

output = pd.DataFrame({'COA Code': ['11000000000', '11000000000'], 
                   'COA English Name': ['ABC', 'ABC'],
                   'Base Currency Exchange Amt.': [1000, 1200],
                   'Base Date': ['26-11-2023', '26-11-2023'],
                   'Branch': ['Hanoi', 'Hochiminh']})   

输出预览:

COA Code COA English Name  Base Currency Exchange Amt.  Base Date  Branch
0  11000000000               ABC                          1000  26-11-2023   Hanoi
1  11000000000               ABC                          1200  26-11-2023   Hochiminh

手动处理单个Sheet的代码可行,但Sheet数量多时效率低:

base_date_1 = sheet_1.iloc[0,3]
branch_1 = sheet_1.iloc[1,4]
sheet_1.columns = sheet_1.iloc[2]
sheet_1 = sheet_1[3:]
sheet_1['Base Date'] = base_date_1
sheet_1['Branch'] = branch_1

base_date_2 = sheet_2.iloc[0,3]
branch_2 = sheet_2.iloc[1,4]
sheet_2.columns = sheet_2.iloc[2]
sheet_2 = sheet_2[3:]
sheet_2['Base Date'] = base_date_2
sheet_2['Branch'] = branch_2

output_2 = pd.concat([sheet_1, sheet_2], axis=0, ignore_index=True)
output_2

尝试循环批量处理时出现报错AttributeError: 'dict' object has no attribute 'iloc',错误代码如下:

import pandas as pd

sheet_name = ['sheet_1', 'sheet_2']

for x in sheet_name:
    df = pd.read_excel('filename.xlsx', sheet_name = sheet_name)
    base_date_1 = df.iloc[0,3]
    branch_1 = df.iloc[1,4]
    df.columns = df.iloc[2]
    df = df[3:]
    df['Base Date'] = base_date_1
    df['Branch'] = branch_1

错误原因

pd.read_excel函数当sheet_name参数传入列表时,返回的是一个字典(key为Sheet名称,value为对应DataFrame),而非单个DataFrame。你在循环里直接对这个字典调用iloc方法,自然会报错。

修正后的批量处理代码

方法一:逐个读取单个Sheet

import pandas as pd

# 定义需要处理的Sheet名称列表
sheet_names = ['sheet_1', 'sheet_2']
# 初始化空列表存储处理后的DataFrame
processed_dfs = []

for name in sheet_names:
    # 每次循环读取单个Sheet,返回单个DataFrame
    df = pd.read_excel('filename.xlsx', sheet_name=name)
    
    # 提取基础日期和分支信息
    base_date = df.iloc[0, 3]
    branch = df.iloc[1, 4]
    
    # 设置正确的列名
    df.columns = df.iloc[2]
    # 筛选有效数据行,重置索引避免混乱
    df = df[3:].reset_index(drop=True)
    
    # 添加Base Date和Branch列
    df['Base Date'] = base_date
    df['Branch'] = branch
    
    # 将处理后的DataFrame加入列表
    processed_dfs.append(df)

# 合并所有处理后的DataFrame
final_output = pd.concat(processed_dfs, axis=0, ignore_index=True)
print(final_output)

方法二:先读取所有Sheet到字典,再遍历处理

import pandas as pd

# 一次性读取所有指定Sheet,返回字典:{Sheet名: DataFrame}
all_sheets = pd.read_excel('filename.xlsx', sheet_name=['sheet_1', 'sheet_2'])
processed_dfs = []

# 遍历字典中的每个DataFrame
for df in all_sheets.values():
    base_date = df.iloc[0, 3]
    branch = df.iloc[1, 4]
    
    df.columns = df.iloc[2]
    df = df[3:].reset_index(drop=True)
    
    df['Base Date'] = base_date
    df['Branch'] = branch
    
    processed_dfs.append(df)

final_output = pd.concat(processed_dfs, axis=0, ignore_index=True)
print(final_output)

两种方法都能实现批量处理多Sheet并合并的需求,处理逻辑和手动方式一致,但无需逐个重复编写代码,适合Sheet数量较多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:17:04