使用Pandas合并Excel文件报错:'DataFrame'对象无'concat'属性
问题分析与解决
错误原因
你遇到的AttributeError: 'DataFrame' object has no attribute 'concat',是因为**concat是Pandas的顶层函数**,不是DataFrame对象的成员方法。你错误地调用了DataFrame实例的concat方法,正确用法是调用pd.concat()并传入要合并的DataFrame列表。
代码中的其他问题
- 拼写错误:
fina19=step19少了字母l,应为final19=step19,否则后续合并会报错。 - 保存逻辑错误:将
to_excel放在循环内部会每次覆盖输出文件;且直接两次调用to_excel会覆盖同一个文件的sheet,需用pd.ExcelWriter实现多sheet写入。 - 初始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
相关产品推荐
相关产品推荐

