Skip to main content
 首页 » 编程设计

python之通过多个循环合并 Excel 工作表

2025年05月04日22tintown

我有许多 Excel 工作簿,每个工作簿都有多个工作表,我想合并它们。

我已经设置了两组循环(一个 while,一个 for)来读取给定工作簿中每个工作表的行,然后对所有工作簿执行相同的操作。

我尝试在其中的一个子集上执行此操作,在我尝试使用 pd.concat 函数组合这两个集合之前,它似乎一直有效。给出的错误是

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

知道我做错了什么吗?

import pandas as pd     
 
d = 2013 
numberOfSheets = 5 
 
while d < 2015: 
    #print(str(d) + ' beginning') 
    f ='H:/MyDocuments/Z Project Work/scriptTest ' + str(d) + '.xlsx'   
    for i in range(1,numberOfSheets+1): 
        data = pd.read_excel(f, sheetname = 'Table '+str(i), header=None)  
        print(i) 
        df.append(data)    
 
    print(str(d) + ' complete') 
    print(df) 
    d += 1 
 
df = pd.concat(df) 
print(df) 
 
final = "H:/MyDocuments/Z Project Work/mergedfile.xlsx"  
df.to_excel(final) 

请您参考如下方法:

如错误所述,pd.concat() 需要一个可迭代对象,如列表:pd.concat([df1, df2]) 将连接 df1 和 df2 沿默认轴 0,这意味着 df2 附加到 df1 的底部。

有两个问题需要解决:

  1. for 循环在为它分配任何内容之前引用 df。
  2. for 循环的每次迭代都会覆盖变量 df。

一种解决方法是在循环之前创建一个空的 DataFrame 列表,然后将 DataFrame 附加到该列表,最后连接该列表中的所有 DataFrame。像这样:

import pandas as pd     
 
d = 2013 
numberOfSheets = 5 
dfs = [] 
 
while d < 2015: 
    #print(str(d) + ' beginning') 
    f ='H:/MyDocuments/Z Project Work/scriptTest ' + str(d) + '.xlsx'   
    for i in range(1, numberOfSheets + 1): 
        data = pd.read_excel(f, sheetname='Table ' + str(i), header=None)  
        print(i) 
        dfs.append(data) 
 
    print(str(d) + ' complete') 
    print(df) 
    d += 1 
 
# ignore_index=True gives the result a default IntegerIndex  
# starting from 0 
df_final = pd.concat(dfs, ignore_index=True) 
print(df_final) 
 
final_path = "H:/MyDocuments/Z Project Work/mergedfile.xlsx"  
df_final.to_excel(final_path)