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

使用Pandas合并Excel文件报错:'DataFrame'对象无'concat'属性

问题分析与解决

错误原因

你遇到的AttributeError: 'DataFrame' object has no attribute 'concat',是因为**concat是Pandas的顶层函数**,不是DataFrame对象的成员方法。你错误地调用了DataFrame实例的concat方法,正确用法是调用pd.concat()并传入要合并的DataFrame列表。

代码中的其他问题

  1. 拼写错误:fina19=step19少了字母l,应为final19=step19,否则后续合并会报错。
  2. 保存逻辑错误:将to_excel放在循环内部会每次覆盖输出文件;且直接两次调用to_excel会覆盖同一个文件的sheet,需用pd.ExcelWriter实现多sheet写入。
  3. 初始DataFrame处理冗余:用first标记的方式可以简化,改用列表收集所有sheet数据再合并更高效。

修正后的代码

import pandas as pd
from tkinter import filedialog, messagebox

def action(): 
    all_files = filedialog.askopenfilename(
        initialdir="/", 
        multiple=True,
        title="select",
        filetypes=(("all files", "*.*"), ("Excel", "*.xlsx*"))
    )
    dossier = filedialog.askdirectory()
    
    # 用列表收集所有2019和2018的sheet数据
    data_19 = []
    data_18 = []
    for f in all_files:
        step19 = pd.read_excel(f, sheet_name='2019')
        data_19.append(step19)
        step18 = pd.read_excel(f, sheet_name='2018')
        data_18.append(step18)
    
    # 合并所有数据
    final19 = pd.concat(data_19, ignore_index=True)
    final18 = pd.concat(data_18, ignore_index=True)
    
    # 用ExcelWriter写入多sheet
    output_path = f"{dossier}\\Filefinal.xlsx"
    with pd.ExcelWriter(output_path) as writer:
        final19.to_excel(writer, sheet_name='19', index=False)
        final18.to_excel(writer, sheet_name='18', index=False)
    
    messagebox.showinfo("Files", "ready")

关键修改点说明

  • 改用列表收集每个文件的sheet数据,最后一次性合并,代码更简洁高效。
  • 使用pd.concat([df1, df2, ...])的正确语法合并DataFrame,添加ignore_index=True重置合并后的索引。
  • 用pd.ExcelWriter实现多sheet写入,避免覆盖问题。
  • 修正拼写错误,移除冗余的first标记逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:41