Python 合并多个工作簿和工作表时出错

Python 合并多个工作簿和工作表时出错,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想知道是否有人能帮忙。我正在合并多个excel文件,这些文件包含1-3张工作表。我想将这些工作表组合成3个数据帧,并使用以下代码完成此操作: all_workbook1 = pd.DataFrame() all_workbook2 = pd.DataFrame() all_workbook3 = pd.DataFrame() for f in glob.glob("*.xlsx"): dfworkbook1 = pd.read_excel(f, sheet_nam

我想知道是否有人能帮忙。我正在合并多个excel文件,这些文件包含1-3张工作表。我想将这些工作表组合成3个数据帧,并使用以下代码完成此操作:

all_workbook1 = pd.DataFrame()
all_workbook2 = pd.DataFrame()
all_workbook3 = pd.DataFrame()

for f in glob.glob("*.xlsx"):
    dfworkbook1 = pd.read_excel(f, sheet_name="sheet1", usecols="B:AO")
    dfworkbook1["Filename"] = "[" + os.path.basename(f) + "]"
    all_workbook1 = all_workbook1.append(dfworkbook1,ignore_index=True)

    dfworkbook2 = pd.read_excel(f, sheet_name="sheet2", usecols="B:AO")
    dfworkbook2["Filename"] = "[" + os.path.basename(f) + "]"
    all_workbook2 = all_workbook2.append(dfworkbook2,ignore_index=True)

    dfworkbook3 = pd.read_excel(f, sheet_name="sheet3", usecols="B:AO")
    dfworkbook3["Filename"] = "[" + os.path.basename(f) + "]"
    all_workbook3 = all_workbook3.append(dfworkbook3,ignore_index=True)
运行此命令时,我可以得到以下错误:

xlrd.biffh.XLRDError: No sheet named <'sheet3'>
xlrd.biffh.xlrd错误:没有命名的工作表
我相信这是因为并非我所有的文件都有“sheet3”。避免这种情况的最佳方法是什么?我曾尝试在文件的开头添加代码,并将丢失的工作表添加为空白工作表,但一直在努力解决这个问题

任何帮助都会很好。 谢谢
Dan

考虑使用运行
try/except
的已定义方法来解释可能丢失的工作表。然后在多个列表理解中为最终连接在一起的相应图纸数据框列表调用方法:

def read_xl_data(file, sh):
   try:
      df = (pd.read_excel(file, sheet_name=sh, usecols="B:AO") 
              .assign(Filename = f"[{os.path.basename(file)}]"))
   except:
      df = pd.DataFrame()

   return df


# LIST COMPREHENSIONS TO RETRIEVE SPECIFIC SHEETS
sheet1_dfs = [read_xl_data(f, "sheet1") for f in glob.glob("*.xlsx")]
sheet2_dfs = [read_xl_data(f, "sheet2") for f in glob.glob("*.xlsx")]
sheet3_dfs = [read_xl_data(f, "sheet3") for f in glob.glob("*.xlsx")]

# CONCAT CORRESPONDING SHEET DFS TOGETHER
all_workbook1 = pd.concat(sheet_1_dfs)
all_workbook2 = pd.concat(sheet_2_dfs) 
all_workbook3 = pd.concat(sheet_3_dfs)

考虑使用运行
try/except
的已定义方法来解释可能丢失的图纸。然后在多个列表理解中为最终连接在一起的相应图纸数据框列表调用方法:

def read_xl_data(file, sh):
   try:
      df = (pd.read_excel(file, sheet_name=sh, usecols="B:AO") 
              .assign(Filename = f"[{os.path.basename(file)}]"))
   except:
      df = pd.DataFrame()

   return df


# LIST COMPREHENSIONS TO RETRIEVE SPECIFIC SHEETS
sheet1_dfs = [read_xl_data(f, "sheet1") for f in glob.glob("*.xlsx")]
sheet2_dfs = [read_xl_data(f, "sheet2") for f in glob.glob("*.xlsx")]
sheet3_dfs = [read_xl_data(f, "sheet3") for f in glob.glob("*.xlsx")]

# CONCAT CORRESPONDING SHEET DFS TOGETHER
all_workbook1 = pd.concat(sheet_1_dfs)
all_workbook2 = pd.concat(sheet_2_dfs) 
all_workbook3 = pd.concat(sheet_3_dfs)

相反,使用数据帧列表并使用
pd.concat
绑定一次。相反,使用数据帧列表并使用
pd.concat
绑定一次。谢谢你的帮助!我唯一不能做的就是创建“Filename”列。如果按原样使用代码,则数据帧似乎为空。然后,我尝试使用与以前相同的方法执行此操作:all_workbook1[“Filename”]==“[”+os.path.basename(f)+“]”,这会提示找不到“f”。任何帮助都会很好。再次谢谢你啊!请用该f字符串中的
file
替换
f
(假设您使用的是Python 3.6+)。太棒了!我真的很感谢你的帮助!太神了谢谢你的帮助!我唯一不能做的就是创建“Filename”列。如果按原样使用代码,则数据帧似乎为空。然后,我尝试使用与以前相同的方法执行此操作:all_workbook1[“Filename”]==“[”+os.path.basename(f)+“]”,这会提示找不到“f”。任何帮助都会很好。再次谢谢你啊!请用该f字符串中的
file
替换
f
(假设您使用的是Python 3.6+)。太棒了!我真的很感谢你的帮助!