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
相关产品推荐
相关产品推荐

