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

Pandas.concat()替代已弃用DataFrame.append()报错求助

解决pd.concat()替代df.append()的报错问题

错误原因

pd.concat()要求第一个参数是多个pandas对象的可迭代集合(比如列表),你直接传入了单个data(DataFrame对象),所以触发TypeError。

两种修改方案

方案1:先收集所有DataFrame再一次性合并(推荐,效率更高)

先把每个sheet读取到的DataFrame存入列表,最后统一合并,避免多次创建新DataFrame的性能损耗:

import os
import pandas as pd
from openpyxl import load_workbook  # 确保导入load_workbook对应的库

# 替换成你的folder和extension2定义
folder = "你的文件夹路径"
extension2 = ".xlsx"

files = os.listdir(folder)
df_list = []  # 用列表存储所有要合并的DataFrame

for file in files:
    if file.endswith(extension2):
        # 用os.path.join生成跨平台兼容的路径
        datafile = os.path.join(folder, file)
        datafile1 = load_workbook(datafile)
        sh_name = datafile1.sheetnames
        for y in sh_name:
            data = pd.read_excel(datafile, sheet_name=y, header=10)
            df_list.append(data)  # 将每个sheet的DataFrame加入列表

# 一次性合并所有DataFrame,ignore_index重置索引
df = pd.concat(df_list, ignore_index=True)

df.to_excel(r'myfilepath\append.xlsx', index=False, engine='xlsxwriter')

方案2:循环中逐次合并(和原代码逻辑更接近)

如果要保持每次循环更新df,需要把当前df和新读取的data放进列表后传给concat:

import os
import pandas as pd
from openpyxl import load_workbook

folder = "你的文件夹路径"
extension2 = ".xlsx"

files = os.listdir(folder)
df = pd.DataFrame()

for file in files:
    if file.endswith(extension2):
        datafile = os.path.join(folder, file)
        datafile1 = load_workbook(datafile)
        sh_name = datafile1.sheetnames
        for y in sh_name:
            data = pd.read_excel(datafile, sheet_name=y, header=10)
            # 将现有df和新data组成列表传入concat
            df = pd.concat([df, data], ignore_index=True)

df.to_excel(r'myfilepath\append.xlsx', index=False, engine='xlsxwriter')

额外小提示

  • 用os.path.join()拼接路径,能自动适配Windows和Linux的路径分隔符,避免手动拼接出现错误。
  • 当处理大量文件或sheet时,方案1的性能明显优于方案2,因为pd.concat()每次调用都会生成新的DataFrame,多次调用会增加不必要的内存开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:39:28